2011-05-29 31 views
2

我正在開發一個FF插件。我想阻止除特定選項卡中的特定域(用戶定義的域)以外的任何域的所有http請求。下面給出的功能很好地完成了這項工作。但問題是它阻止來自所有標籤的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); 

} 
+0

再一次...任何hep? – 2011-05-29 11:13:39

回答

2

下面是一個示例,您可以從請求(應該是nsIChannel)獲取loadContent。

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。