2011-06-03 25 views
1

我正在嘗試將僅供內部使用的快速Firefox側邊欄放在一起。Firefox側邊欄在主瀏覽器窗口中調用JavaScript函數

我在理解邊欄和主瀏覽器窗口如何通信方面有點困難。我想要做的就是調用僅存在於主瀏覽器窗口中的現有JavaScript函數。

我的代碼看起來像這樣;

FF-sidebar.xul

<checkbox label="Button hover" checked="false" oncommand="add_enhance(this)"/> 

FF-sidebar.js

function add_enhance(cb){ 
    if (cb.checked) { 
     // this bit is wrong I know 
     window.content.document.NEWSTYLE.buttonHover(); 
    } 
} 

所以現在的問題是,我怎麼叫了一個名爲NEWSTYLE.buttonHover()功能,生活在主窗口?

回答

1

從理論上講,這應該工作:

window.content.NEWSTYLE.buttonHover(); 

window.content指向瀏覽器內容窗口和可變NEWSTYLE在該窗口中定義。事實上,由於安全機制,事情會變得更加混亂 - 特權代碼無法直接訪問非特權代碼的對象。相反,您可以通過XPCNativeWrapper訪問它們(請參閱https://developer.mozilla.org/en/XPCNativeWrapper)。技術細節在Firefox 4中有所變化,但基本上它仍然是一樣的。

在不引入安全問題的情況下執行所需操作的最簡單方法是將內容窗口的位置更改爲javascript:URL。就像這樣:

window.content.location.href = "javascript:void NEWSTYLE.buttonHover()"; 

你將無法得到這個函數的結果,但它並不像你需要它。

+0

弗拉基米爾,非常感謝使用location.href的整潔'快捷方式'。我嘗試過'window.content'類型的多種變體,但沒有運氣。文檔很混亂。你說的很對,因爲我不需要從函數返回,在這種情況下,它會觸發現有函數添加增強功能以​​在內部站點上顯示案例。我一直把頭髮拉出來,非常感謝你的回答! – BusterLuke 2011-06-06 13:48:04

相關問題