「Electrolysis(e10s)」の編集履歴(バックアップ)一覧に戻る
Electrolysis(e10s)」を以下のとおり復元します。
-[[The message manager | MDN>https://developer.mozilla.org/ja/docs/The_message_manager]]
--古いページなので内容は微妙だが、概要を日本語で読める。
-[[Multiprocess Firefox - Mozilla | MDN>https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox]]
-[[Working with multiprocess Firefox - Mozilla | MDN>https://developer.mozilla.org/en-US/Add-ons/Working_with_multiprocess_Firefox]]
-[[Message manager - Mozilla | MDN>https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Message_Manager]]
-[[Latest topics > Firefoxアドオンのe10s(マルチプロセス)対応の方針について得られた知見 - outsider reflex>http://piro.sakura.ne.jp/latest/blosxom/mozilla/xul/2014-11-13_e10s.htm]]


-e10s対応拡張機能を作成する際は、install.rdf に以下の記述をする。
 <em:multiprocessCompatible>true</em:multiprocessCompatible>
-これを記述していないと、互換性維持の為のラッパーである CPOWs が勝手に起動しておかしな動作をして悩む事になりかねない。

-e10sではChromeプロセスとContentプロセスに分離する。
-Chromeプロセスで動作するメインのスクリプトをChromeスクリプトと呼ぶ。これは今までの拡張機能そのままのもの。
-Contentプロセスの中で動作する、Webコンテンツに直接アクセスできるスクリプトの事をFrameスクリプトと呼ぶ。
-ChromeプロセスとContentプロセスを繋ぐのがメッセージマネージャ。
-メッセージマネージャは階層構造になってて、全体を・ウィンドウごとに・タブごとに、管理している。
-[[Message manager overview - Mozilla | MDN>https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Message_Manager/Message_manager_overview]]

-ContentプロセスにFrameスクリプトを読み込ませるには、Chromeスクリプト内でメッセージマネージャのloadFrameScriptを使う。
#highlight(javascript){{
// 全てのウィンドウ及びタブなら
var globalMM = Cc["@mozilla.org/globalmessagemanager;1"].getService(Ci.nsIMessageListenerManager);
// var globalMM = Services.mm;
globalMM.loadFrameScript("chrome://sample/content/frame-script.js", true);
// アクティブなウィンドウのみでなら
var windowMM = window.messageManager;
windowMM.loadFrameScript("chrome://sample/content/frame-script.js", true);
// アクティブなウィンドウのアクティブなタブのみでなら
var browserMM = gBrowser.selectedBrowser.messageManager;
browserMM.loadFrameScript("chrome://sample/content/frame-script.js", true); }}

-ChromeスクリプトとFrameスクリプトとの情報のやり取りはJSON、つまり文字列のみ。
-メッセージマネージャで情報のやりとりをする。
-[[Communicating with frame scripts - Mozilla | MDN>https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Message_Manager/Communicating_with_frame_scripts]]
-FrameスクリプトからChromeスクリプトへ情報を送る場合は
#highlight(javascript){{
// frame script
sendAsyncMessage("addon-id@sample", {})
sendSyncMessage("addon-id@sample", {}) }}
#highlight(javascript){{
// chrome script
messageManager.addMessageListener("addon-id@sample", listener); }}
-ChromeスクリプトからFrameスクリプトへ情報を送る場合は
#highlight(javascript){{
// chrome script
globalMM.broadcastAsyncMessage("addon-id@sample", {})
windowMM.broadcastAsyncMessage("addon-id@sample", {})
browserMM.sendAsyncMessage("addon-id@sample", {}) }}
#highlight(javascript){{
// frame script
addMessageListener("addon-id@sample", listener); }}

復元してよろしいですか?