[英]How to make use of c++ xpcom component from javascript xpcom component
[英]XPCOM object method is unaccessible from JavaScript
我正在尝试为Firefox构建扩展程序。 此扩展使用XPCOM组件(C ++ dll)。 我正在编译DLL,编译正常。
我还成功构建了一个可以从XPCOM实例化该对象的JS代码:
try {
greenfox;
return true;
} catch( e ) {
alert( e );
return false;
}
返回的对象是此对象:
QueryInterface
QueryInterface()
__proto__
[xpconnect wrapped native prototype] { QueryInterface=QueryInterface()}
QueryInterface
QueryInterface()
一切都很好,只是我无法调用应该在我的XPCOM组件中的函数。
这是我的IDL文件:
[scriptable, uuid(ec8030f7-c20a-464f-9b0e-13a3a9e97384)]
interface nsISample : nsISupports
{
attribute string value;
void writeValue(in string aPrefix);
void poke(in string aValue);
void start();
double stop();
};
调用start()函数时,出现Javascript错误:“不是函数”
greenfox.start();
你有什么主意吗? 我的XPCOM中似乎没有任何功能公开。
您似乎正在查看仅公开nsISupports
接口的对象。 默认情况下,您的接口( nsISample
)将不会公开,您必须显式请求它。 例如,可以通过实例化组件来做到这一点:
var greenfox = Components.classes["..."].getService(Components.interfaces.nsISample);
greenfox.start();
或者,您也可以在已经具有的对象上调用QueryInterface
:
greenfox.QueryInterface(Components.interfaces.nsISample);
greenfox.start();
通常,出于此处概述的原因,我不建议使用二进制XPCOM组件,维护它们需要花费大量精力。 我宁愿建议编译一个常规DLL并通过js-ctypes使用它。 引用js-ctypes的二进制组件时,提到了如何在附件中定位DLL以便通过js-ctypes使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.