「Electrolysis(e10s)」の編集履歴(バックアップ)一覧に戻る

Electrolysis(e10s) - (2015/09/14 (月) 08:44:31) の編集履歴(バックアップ)





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

  • ContentプロセスにFrameスクリプトを読み込ませるには、Chromeスクリプト内でメッセージマネージャのloadFrameScriptを使う。
// 全てのウィンドウ及びタブなら
var globalMM = Cc["@mozilla.org/globalmessagemanager;1"].getService(Ci.nsIMessageListenerManager);
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
  • FrameスクリプトからChromeスクリプトへ情報を送る場合は
// frame script
sendAsyncMessage("addon-id@sample")
sendSyncMessage("addon-id@sample") 
// chrome script
messageManager.addMessageListener("addon-id@sample", listener); 
  • ChromeスクリプトからFrameスクリプトへ情報を送る場合は
// chrome script
globalMM.broadcastAsyncMessage("addon-id@sample")
windowMM.broadcastAsyncMessage("addon-id@sample")
browserMM.sendAsyncMessage("addon-id@sample") 
// frame script
addMessageListener("addon-id@sample", listener);