私は何百万もの異なることを試しましたが、これを機能させることはできません。
私が持っているxpiファイルの中に:
* content folder
-browserOverlay.js
-browserOverlay.xul
* locale folder
*en-US folder
-browserOverlay.dtd
-browserOverlay.properties
* skin folder
-browserOverlay.css
Firefox 14.0.1 を使用していますが、「Hello World」拡張機能の XPCOM を使用しない部分が機能しています。今のところ、クリックすると「Hello World」が表示されるボタンを含むツールバーを追加し、Gecko SDK を使用して構築し、VS 2005 を使用してコンパイルした C++ XPCOM コンポーネントを実行しようとするだけです。
browserOverlay.js ファイルには、次のコードが含まれています。
/**
* XULSchoolChrome namespace.
*/
if ("undefined" == typeof(XULSchoolChrome)) {
var XULSchoolChrome = {};
};
/**
* Controls the browser overlay for the Hello World extension.
*/
XULSchoolChrome.BrowserOverlay = {
/**
* Says 'Hello' to the user.
*/
sayHello : function(aEvent) {
let stringBundle = document.getElementById("xulschoolhello-string-bundle");
let message = stringBundle.getString("xulschoolhello.greeting.label");
window.alert(message);
try
{
// normally Firefox extensions implicitly have XPCOM privileges
//but since this is a file we have to request it.
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const cid = "@example.com/XPCOMSample/MyComponent;1";
obj = Components.classes[cid].createInstance();
// bind the instance we just created to our interface
obj = obj.QueryInterface(Components.interfaces.IMyComponent);
} catch (err) {
alert(err);
return;
}
var res = obj.Add(3, 4);
alert('Performing 3+4. Returned ' + res + '.');
}
};
ボタンをクリックすると、最初の警告ウィンドウが表示されます。[OK] をクリックすると、ウィンドウに次のエラー メッセージが表示されます。
TypeError: Components.classes[cid] は定義されていません
私は何を間違っていますか?xpi ファイル内のどこに .dll ファイルを配置すればよいですか? .idl ファイル? .xpt ファイル?