すべての JS アドオン コードはメイン スレッドで実行されますか?
はい。私の知る限り、このルールの唯一の例外は、 Web ワーカーまたはChromeWorkerを介して実行するコードです。Add-on SDK に基づく拡張機能を別のプロセスで実行する計画がありましたが、これがまだ目標であるかどうかはわかりません。
アドオン コードは、メイン スレッド上のさまざまな JS ランタイムによって実行される可能性がありますか?
理論的には - はい。たとえば、拡張機能には、異なる JavaScript エンジンを含むバイナリ XPCOM コンポーネントが付属している可能性があります。または 、JavaScript ベースの JavaScript エンジンに付属するZaphod 拡張機能があります。しかし、それは、通常の SpiderMonkey エンジンで実行されるコードにはあまり関係ありません。
アドオン コードの一部がハングする奇妙な動作がアドオンに見られます (モーダル ダイアログが起動している場合、ソケット #1 でデータを受信できません)。
JavaScript の実行はイベント キューに基づいています。ブラウザーはキューからイベント (DOM イベント、タイムアウト、ネットワーク イベントなど) を取得し、それを処理して、対応する JavaScript コードを実行します。この JavaScript コードが終了するまで、他のイベントは処理できません。
ただし、モーダル ダイアログが開いているときや同期が実行されているときは、JavaScript コードは引き続き実行されませんが、XMLHttpRequest
イベントは引き続き処理する必要があります。これは、モーダル ダイアログと、XMLHttpRequest
アクティブなときにイベント処理を行うことで解決されます (独自のイベント ループをスピンします)。
ここまで基本。ソケットに着信するデータは通常のイベントであり、メイン イベント ループまたはモーダル ダイアログのループによって処理されているかどうかに関係なく機能するはずです。