繁体   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