張貼我的考驗這裏,所以它可以幫助所有:
線索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);
Error Thrown
Security Error: Content at http://digg.com/tools/diggthis/confirm ? may not load or link to jar:file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/[email protected]!/resources/kaboom/data/pages/test.html.
試驗2失敗 - 創建的資源在bootstrap.js
alias.spec = file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/[email protected]
alias updated to spec: jar:file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/[email protected]!/
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);
錯誤時,拋出
Security Error: Content at http://digg.com/tools/diggthis/confirm ? may not load or link to jar:file:///C:/Documents%20and%20Settings/SONY%20VAIO/Application%20Data/Mozilla/Firefox/Profiles/vr10qb8s.default/extensions/[email protected]!/resources/kaboom/data/pages/test.html.
結論 在上述兩個試驗中,這是最奇怪的事情,它不會顯示拋出的安全錯誤中的資源或鉻路徑,但它會給出完整的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,而不是因爲它是推薦的方式。也gBrowser getMostRecentBrowserWindow將失敗,如果URL加載速度慢,在那段時間用戶切換到另一個選項卡或窗口
我也改變爲使用Services.jsm,因爲你已經導入Cu反正。使用Services.jsm超級快速,甚至不會快速閃爍。它只是一個指針。
我仍在努力嘗試redirectTo方法,它的工作真的困擾着我。我所做的更改是我的本地副本。
我也採用了這種方法。問題是,在我的情況下,我試圖捕獲一個iframe(與此代碼一起工作)的導航,然後重定向iframe(而不是頂部窗口)。提供的代碼嘗試導航頂部窗口而不是iframe。我試過這種方法:loadContext.associatedWindow.frameElement.src ='chrome://kaboom-data/content/test.html';即使使用chrome.manifest也會產生相同的安全錯誤 –
你確定是男士嗎?毫無疑問,loadContext.associatedWindow是加載的contentWindow,所以它的iframe或框架或頂部窗口。我沒有在這個範圍內測試過,但之前。你能告訴我如何重現你的情況嗎?生病測試 – Noitidart
幾個星期前我在loadContext上完成的非常繁重的測試以及它如何獲得它實際加載的地方的窗口可以在這裏找到(https:// github .com/Noitidart/loadcontext-and-http-modify-observer)和[here](https://github.com/Noitidart/demo-nsITraceableChannel)。現在,如果你真的不想這樣做,那麼你可以求助於添加事件監聽器,如[這裏](https://gist.github.com/Noitidart/8685542)或者你可以使用Web進程監聽器,你也可以使用documjent見元素插入的觀察者[here](https://gist.github.com/Noitidart/8704127)。 loadContext最容易 – Noitidart