![](/img/trans.png)
[英]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.