2014-03-04 67 views
0

我已經使用addon SDK製作了一個插件。該插件增加了一個按鈕,導航欄,並且點擊時它使用類似於此代碼打開了一些數據的新標籤從內部索引資料:在Firefox啓動時加載附加HTML頁面

// main.js 
tabs.open({ 
    url: self.data.url('index.html'), 
    onReady: runScript 
}); 

function runScript(tab) { 
    var worker = tab.attach({ 
    contentScriptFile: [ 
     self.data.url("script.js")] 
    }); 
} 

一切工作正常,除了場景用戶退出Firefox並再次打開它,該選項卡將被恢復,但它將不包含任何內容,因爲它沒有被插件按鈕點擊觸發。這是因爲頁面上的腳本通過main.js中的runScript函數加載,該函數在重新啓動時加載HTML文件時不會執行。

如何讓此選項卡在頁面啓動時具有與點擊按鈕時相同的行爲?

+0

顯示了用於恢復的標籤是什麼網址? – willlma

+0

資源://jid1-gzlhtgbcb5hzka-at-jetpack/myextension/data/index.html – GiantSquid

回答

1

我認爲你必須重新加載標籤:

exports.main = function(options) { 
    if(options.reason==='startup') for (var i=tabs.length-1; i>=0; i--) { 
    var tab = tabs[i]; 
    if (tab.url!==self.data.url('index.html')) continue; 
    tab.once('ready', runScript.bind(null, tab)); 
    tab.reload(); 
    /* If it can't reload the tab, 
    use tab.url = self.data.url('index.html'); */ 
    } 
    // ... 
} 
+0

Taht工作就像一個魅力,非常感謝你! – GiantSquid

+1

我的榮幸。我編輯了答案(把tab.on改成了tab.once,這樣runScript只被調用一次,否則你的腳本會被注入到你在該選項卡中導航到的每個頁面中,直到你關閉它爲止。 – willlma

-1

這我已經報告說,它前一段時間上的Bugzilla here

的錯誤我加了你的話題作爲一個例子。

所以你現在要做的就是onReady,你必須把你的身體變成html數據並將標籤的位置設置爲這個內容。

例如就緒:

var htmlDataUri = 'data:text/html,' + encodeURIComponent(document.documentElement.innerHTML); 
//end make htmldatauri 
document.location = htmlDataUri; 
+0

感謝您的回答,但我不明白這會有什麼幫助。 'onReady'永遠不會執行,因爲這發生在addon腳本一側,而這在啓動時加載HTML頁面時不會執行。 – GiantSquid

+0

我不知道sdk。無論哪個事件觸發該標籤頁完成加載後,然後運行此代碼。 – Noitidart

+0

它使空白的原因是當你使用addon sdk製作一個新選項卡時,它會打開:空白並用你的html填充它。如果你想要非SDK版本,我可以給你一個你想看到的例子嗎?上傳你的插件的xpi,我會給你一個演示非sdk – Noitidart