【问题标题】:How to block HTTP request on a particular tab?如何阻止特定选项卡上的 HTTP 请求?
【发布时间】:2011-05-29 10:17:38
【问题描述】:

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

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);

}

【问题讨论】:

    标签: javascript firefox firefox-addon


    【解决方案1】:

    这是一个示例,您可以从请求中获取 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2021-01-05
      • 2018-01-28
      • 2019-10-11
      相关资源
      最近更新 更多