如何从 javascript xpcom 组件中使用 c++ xpcom 组件
Posted
技术标签:
【中文标题】如何从 javascript xpcom 组件中使用 c++ xpcom 组件【英文标题】:How to make use of c++ xpcom component from javascript xpcom component 【发布时间】:2010-02-05 10:05:50 【问题描述】:我使用 c++ 开发了一个 xpcom 组件。我的组件中有 GetHWND() 方法。我还使用 javascript 开发了另一个 xpcom 组件。我想在 javascript xpcom 组件中使用 GetHWND 函数。我正在使用以下代码来执行此操作。
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var myComponent = Components.classes['@dougt/WebLock'].createInstance(Components.interfaces.IWebLock);
myComponent = myComponent.QueryInterface(Components.interfaces.IWebLock);
var res = myComponent.GetHWND(mainWindow.content.document);
但它给出的错误是“ReferenceError: netscape is not defined”。 google了一下,没找到解决办法。
我正在使用 Mozilla Firefox,我希望它也能正常工作。
请帮助我摆脱这个问题。 提前致谢。
【问题讨论】:
我会在问题中添加 c++ 和 javascripts 标签,以尝试让更多人寻找解决方案。 【参考方案1】:你不需要这些:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
【讨论】:
【参考方案2】:我同意 Nickolay 的观点,当你的扩展代码被执行时,它具有 chrome 权限,允许你访问 XPCOM 层和组件。
我想看看它是否能与 Nikolay 提到的线条配合使用。 第二项>>如何定义 C++ 组件的接口。 XPIDL 不知道 HWND 类型,因此您必须提供一些不同的类型,或者您可以使用本机类型但 [scriptable] 接口不支持它
【讨论】:
以上是关于如何从 javascript xpcom 组件中使用 c++ xpcom 组件的主要内容,如果未能解决你的问题,请参考以下文章
帮我创建一个 Firefox 扩展(Javascript XPCOM 组件)
Firefox 6:XPCOM 组件中的 QueryInterface(nsIDOMWindow::GetIID() 问题,用于从 js 传递的浏览器内容窗口