如何从 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 组件)

c++ XPCOM组件与COM服务之间的通信(IPC)

Firefox 6:XPCOM 组件中的 QueryInterface(nsIDOMWindow::GetIID() 问题,用于从 js 传递的浏览器内容窗口

XPCOM 的 XPI 扩展

注册 XPCOM 组件时出现问题

在 Firefox 中注册 XPCOM。未知 CID