Как отменить http-запросы? - PullRequest
3 голосов
/ 30 мая 2011

Я пытаюсь отменить HTTP-запрос, используя 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);
            }
    }
}

1 Ответ

2 голосов
/ 07 июня 2011

Это, вероятно, потому что NS_BINDING_SUCCEEDED не является кодом ошибки (да, документация кажется неправильной). То, что вы на самом деле хотите использовать, это Components.results.NS_BINDING_ABORTED.

Кстати, вы, кажется, сравниваете имя хоста в URL. Учитывая, что у вас уже есть объект nsIURI, это можно сделать проще:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...