[英]xpcom array can transfer in different xul files?
現在,我正在開發firefox擴展,可以在具有主要xul的js中定義全局數組。 當我在另一個帶有xul的js中使用它時,發現它不起作用,所以我搜索了Firefox開發文檔。 我發現無法在具有不同xul文件的兩個js文件之間傳輸通用數組。 然后我在js中定義了xpcom mutablearray:
var eleList = Components.classes [“ @ mozilla.org/array;1”] .createInstance(Components.interfaces.nsIMutableArray);
但是當我想在另一個js中使用它時:它仍然不起作用,為什么呢? 非常感謝你!
問題是,即使創建可變數組,也要在對該數組對象的引用中將其存儲在創建它的XUL上下文中的變量中。 在另一個XUL中,您看不到該變量,因此無法訪問該數組。
有多種解決方案可用於跨不同上下文訪問對象:
從其中一個上下文中,獲得對另一個上下文的引用。 例如,您在主窗口中定義了一個變量(browser.xul覆蓋),您可以通過使用窗口管理器來獲取對主窗口的引用,從邊欄中獲取它。
您可以創建自己的XPCOM對象,盡管這並不容易,特別是針對像您這樣的簡單情況而言
您可以使用JavaScript模塊來創建全局單例。
您應該考慮研究JavaScript模塊選項。 這是最簡單,最可靠的方法。 它是Firefox 3.0中引入的,您可以僅使用JavaScript來完成此操作,而無需創建XPCOM
在這里查看更多詳細信息:
https://developer.mozilla.org/en/JavaScript_code_modules/Using_JavaScript_code_modules
更新:
以下是有關如何獲取對主窗口的引用的更多詳細信息,以查看在browser.xul中定義了哪些變量。
您可以在browser.xul疊加層(主窗口)中定義變量:
myArray = [1, 2, 3];
然后從側邊欄xul中,可以獲得對主窗口的引用,並使用該引用訪問變量:
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
var value = mainWindow.myArray[0];
這些鏈接可能為您提供有用的信息:
https://developer.mozilla.org/en/Working_with_windows_in_chrome_code
https://developer.mozilla.org/en/Code_snippets/Tabbed_browser
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.