如何在特定选项卡上阻止HTTP请求?

时间:2011-05-29 10:17:38

标签: javascript firefox firefox-addon

我正在开发一个FF插件。我想在特定选项卡中阻止除特定域(用户定义域)之外的任何域的所有http请求。下面给出的功能很好地完成了工作。但问题是它阻止来自所有选项卡的http请求。如何仅在特定选项卡中启用以下功能?如何获取与http请求关联的选项卡?

function allowOnly(domain)
{
    //to block http request
    Components.classes["@mozilla.org/observer-service;1"]
    .getService(Components.interfaces.nsIObserverService)
    .addObserver(
    {
    observe:
        function(aSubject, aTopic, aData)
        {
            if ("http-on-modify-request" == aTopic)
            {
                    var url = aSubject
                    .QueryInterface(Components.interfaces.nsIHttpChannel)
                    .originalURI.spec;
                    if (domain.lastIndexOf(doc.location) != 0 ) //cancel all http request of other domain & sub domain
                {
                    aSubject.cancel(Components.results.NS_BINDING_SUCCEEDED);
                    }
                }
        }
    }, "http-on-modify-request", false);

}

1 个答案:

答案 0 :(得分:2)

以下是一个示例,您可以从请求中获取loadContent(应该是nsIChannel)。

var loadContext;
try {
  loadContext = 
    aRequest.QueryInterface(Components.interfaces.nsIChannel)
            .notificationCallbacks
            .getInterface(Components.interfaces.nsILoadContext);
} catch (ex) {
  try {
    loadContext =
      aRequest.loadGroup.notificationCallbacks
              .getInterface(Components.interfaces.nsILoadContext);
  } catch (ex) {
    loadContext = null;
  }
}

nsILoadContext具有“associatedWindow”,“topWindow”属性,因此您应该获取源DOMWindow。