在这里发布我的试验,以便对所有人有所帮助:
trail 1 失败 - 创建 chrome.manifest 文件,内容为 content kaboom-data resources/kaboom/data/ contentaccessible=yes
var myuri = Services.io.newURI('chrome://kaboom-data/content/pages/test.html', undefined, undefined);
httpChannel.redirectTo(myuri);
抛出错误
安全错误:http://digg.com/tools/diggthis/confirm 的内容?可能
不加载或链接到
jar:file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/jid1-g4RtC8vdvPagpQ@jetpack.xpi!/resources/kaboom/data /pages/test.html.
试用 2 失败 - 在 bootstrap.js 中创建资源
别名.spec =
file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/jid1-g4RtC8vdvPagpQ@jetpack.xpi
别名已更新为规范:
jar:file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/jid1-g4RtC8vdvPagpQ@jetpack.xpi!/
let resource = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
let alias = Services.io.newFileURI(data.installPath);
Cu.reportError('alias.spec = ' + alias.spec);
if (!data.installPath.isDirectory()) {
alias = Services.io.newURI("jar:" + alias.spec + "!/", null, null);
Cu.reportError('alias updated to spec: ' + alias.spec);
}
resource.setSubstitution("kaboom_data", alias);
...
var myuri = Services.io.newURI('resource://kaboom_data/resources/kaboom/data/pages/test.html', undefined, undefined);
httpChannel.redirectTo(myuri);
抛出错误
安全错误:http://digg.com/tools/diggthis/confirm 的内容?可能
不加载或链接到
jar:file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/jid1-g4RtC8vdvPagpQ@jetpack.xpi!/resources/kaboom/data /pages/test.html.
结论
在上面的两个试验中,这是最奇怪的事情,它不会在抛出的安全错误中显示资源或 chrome 路径,但它会给出完整的 jar 路径。让我相信这与 redirectTo 功能有关。
有效的解决方案是你的解决方案
var gBrowser = utils.getMostRecentBrowserWindow().gBrowser;
var domWin = httpChannel.notificationCallbacks.getInterface(Ci.nsIDOMWindow);
var browser = gBrowser.getBrowserForDocument(domWin.document);
//redirect
browser.loadURI(self.data.url('pages/test.html'));
但是我将其更改为使用 loadContext 而不是此方法,因为这是推荐的方法。如果 url 加载缓慢并且在那个时候用户切换到另一个选项卡或窗口,gBrowser 到 getMostRecentBrowserWindow 也会失败
我也改为使用 Services.jsm,因为无论如何你已经导入了 Cu。使用 Services.jsm 非常快,甚至连眨眼都不快。它只是一个指针。
我仍在努力尝试使用 redirectTo 方法,它真的让我很困扰。我所做的更改是针对我的本地副本。