2013-04-06 27 views
6

我試圖將Greasemonky腳本轉換爲Firefox的擴展,我試圖讓我的擴展程序自動將一個簡單的腳本附加到任何網頁時,打開一個新的選項卡。我正在從Greasemonkey轉換腳本,因爲我想利用高級首選項和菜單選項。如何訪問新打開的選項卡的窗口對象? [在Firefox的擴展]

我訪問使用的標籤是:

var container = gBrowser.tabContainer; 
container.addEventListener("TabOpen", tabAdded, false); 

function tabAdded(event) { 
var newtabwindow = event.target.____ //I don't know what goes here 
//attach script to newtabwindow 
} 

,我的目標是將腳本追加到文檔中的新標籤,一旦加載使用此功能:

function scriptrunner(targetwindow) { 
var myScript = targetwindow.content.document.createElement('script'); 
    myScript.type = 'text/javascript'; 
    myScript.setAttribute('src','chrome://addonname/content/addonscript.js'); 
    targetwindow.content.document.getElementsByTagName('head')[0].appendChild(myScript); 
} 

此功能可以使用oncommand =「scriptrunner(window)」附加到工具欄按鈕時將腳本附加到當前頁面,但我不知道如何在新打開的選項卡中訪問窗口,或者如果我應該切掉從等式的窗口並以另一種方式訪問​​文檔。

+0

'var newtabwindow = event.target;'不工作? – Sukima 2013-04-06 23:02:27

+2

從你的描述看來,Mozilla的[附加SDK](https://addons.mozilla.org/en-US/developers/docs/sdk/latest/)更適合這項工作。您可以使用[page-mod](https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/page-mod.html)將內容腳本附加到任何網頁URL匹配模式,或使用[tabs](https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/tabs.html)模塊。 – ZER0 2013-04-07 01:07:23

回答

2

您正在查找contentWindow,它是browser元素的財產。

給定tab,請致電gBrowser.getBrowserForTab獲取與tab相關聯的browser元素。然後訪問browser元素的contentDocumentcontentWindow屬性(這些相當於您應該已經熟悉的documentwindow對象)。

另外 - 如果我沒有弄錯 - 除了聽tab的事件之外,您還需要聽取contentWindow"load"事件。

+1

我發現[在頁面加載](https://developer.mozilla.org/en-US/docs/Code_snippets/On_page_load)的示例刪除了需要監聽TabOpen事件,是的,我不得不使用加載窗口的事件偵聽器。 – user2253229 2013-04-14 03:19:18