アドオン SDK を使用して Firefox 拡張機能を作成しています。さまざまな理由 (主に simple-prefs モジュールの機能の不足) により、XUL ウィンドウを作成し、window/utils を使用して含める必要がありました。このウィンドウは正しく表示され、正確に機能します。
私の問題はmain.js
、XUL ウィンドウに含まれているスクリプト ファイルから関数を呼び出す必要があることです。それらは同じ名前空間に存在しないため、関数にアクセスする方法がわかりません。port
私はメッセージパッシングを喜んで使用しますが、XPCOM に含まれるスクリプトでこの機能を利用できるとは思いません。
ある種のコールバックを設定する必要があると考えていますが、どうすればそれができるのか本当にわかりません。独自の XPCOM コンポーネントを作成することを検討しましたが、XUL 移行ガイドによると、XPCOM コンポーネントをアドオン SDK に登録することは許可されていないようです。
参考までに、これが私の(省略された)フォルダー構造です。
- package.json
- chrome.manifest (to allow me to open a XUL window)
- lib
- main.js
- chrome
- content
- window.xul
- script.js
のいくつかのコードが のmain.js
いくつかのコードによって呼び出されるようにしますscript.js
。ウィンドウが main.js で作成されていることに注意してください (そのように)
var { open } = require('sdk/window/utils');
var window = open('chrome://my-app-id/content/window.xul', { features: {
chrome: true,
centerscreen: true,
toolbar: true
}});
そして、これだけうまくいきます。誰にもアイデアはありますか?
編集:設定の変更を監視しmain.js
、関数を呼び出したいときに設定を変更することでこれを回避できますが、それは設定システムの大きな乱用に思えます。正しい方法があれば、それを行いたいと思います。