簡體   English   中英

如何取消 http 請求?

[英]How to cancel http requests?

我正在嘗試使用aSubject.cancel(Components.results.NS_BINDING_SUCCEEDED); 但它不起作用。 代碼如下。 任何人都可以糾正它嗎?

function(aSubject, aTopic, aData)
{
    if ("http-on-modify-request" == aTopic)
    {
        //get the http request url
            var url = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel).originalURI.spec;

        //get the referer of http request (this error gives an error; dont know why :( 
        var a = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel).getRequestHeader("referer");

        //Cancel http request from other domains 
        if (url.split('//')[1].split('/')[0] != a.split('//')[1].split('/')[0])
        {
            //the code below don't work! Someone please correct it.
            //code to cancel http request
            aSubject.cancel(Components.results.NS_BINDING_SUCCEEDED);
            }
    }
}

這可能是因為 NS_BINDING_SUCCEEDED 不是錯誤代碼(是的,文檔似乎是錯誤的)。 您真正想要使用的是Components.results.NS_BINDING_ABORTED

順便說一句,您似乎在比較 URL 中的主機名。 鑒於您已經擁有 nsIURI object,這可以更輕松地完成:

var requestHost = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel).originalURI.host;
var referrerHost = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel).referrer.host;
if (requestHost != referrerHost)
{
    aSubject.cancel(Components.results.NS_BINDING_ABORTED);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM