簡體   English   中英

xpcom數組可以在不同的xul文件中傳輸嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM