我正在开发一个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);
}
答案 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。