我正在使用 SDK 创建一个 Firefox 插件。我的目标很简单,拦截特定的 iframe 并加载我自己的 HTML 页面(与我的插件一起打包为资源)而不是最初请求的内容。
到目前为止,我有以下代码:
var httpRequestObserver =
{
observe: function(subject, topic, data)
{
var httpChannel, requestURL;
if (topic == "http-on-modify-request") {
httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
requestURL = httpChannel.URI.spec;
var newRequestURL, i;
if (/someurl/.test(requestURL)) {
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
httpChannel.redirectTo(ioService.newURI(self.data.url('pages/test.html'), undefined, undefined));
}
return;
}
}
};
var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.addObserver(httpRequestObserver, "http-on-modify-request", false);
Run Code Online (Sandbox Code Playgroud)
此代码的工作原理是它检测到正确的 iframe 加载并正确执行重定向。但是,我收到以下错误:
安全错误:http ://url.com 上的内容可能无法加载或链接到 jar:file:///.../pages/test.html。
我怎样才能绕过这个限制?