Opera, Chrome, Safari の Extension API の違い 2012年02月05日(日)

らくだ
-OperaChromeSafari
定義ファイルconfig.xmlmanifest.jsonInfo.plist
仕様xmlJSONxml
備考W3C Widget 規格準拠以下、定義の値はこの JSON のプロパティ名拡張機能ビルダーが生成してくれるので実際に触る事はほとんど無い。
Content Scripts定義UserJS 定義content_scripts【取り込んだ機能拡張の内容】
フォルダ/include自由自由
読み込み開始ページが読み込まれると同時に。run_at で定義。【スクリプトを開始】/【スクリプトを終了】
読み込み順ファイル名降順 ただし locales 以下はルート以下が全て読み込まれた後。定義順定義順
同期非同期
オリジンUserJS 定義の@include/@excludematches に列挙【ホワイトリスト】/【ブラックリスト】
ifrmae全てall_frames プロパティ全て
Background定義<content>background_page【拡張機能グローバルページ】
標準index.htmlなし
取得opera.extension.bgProcesschrome.extension.getBackgroundPage()safari.extension.globalPage.contentWindow
Options定義options_page無し。
標準options.html
Toolbar Item定義/生成opera.contexts.toolbar.createItem()browser_action【ツールバー項目】
取得生成時の返値を保持chrome.browserActionsafari.extension.toolbarItems[0]
Popup定義Button.popup へのオブジェクト代入browser_action.popup【ポップオーバー】
Active Tab取得opera.extension.tabs.getFocused()chrome.tabs.getSelected(windowId, function(tab){})safari.application.activeBrowserWindow.activeTab
通信コールバック無し有り無し
送信content to Bakcgoundopera.extension.postMessage(data)chrome.extension.sendRequest(data,callback)safari.self.tab.dispatchMessage(name,data)
Options/Popup to Bakcgoundbackground.postMessage(data,origin)
Background to Contenttab.postMessage(data)tab.extension.sendRequest(data,callback)tab.page.dispatchMessage(name,data)
受信Background from Contentopera.extension.addEventListener('message',function(e){...},false)chrome.extension.onRequest.addListener(function(data,sender,callback){...})safari.application.addEventListener('message',function(e){...},false)
Content from Backgroundsafari.self.addEventListener('message',function(e){...},false)
Content from Popupwindow.addEventListener('message',function(e){...},false)
返信(background to content)e.source.postMessage(response)callback(response)e.target.page.dispatchMessage(name,response)
連携ページのオブジェクト window にオブジェクトを追加する事で可能。ただし、セキュリティに注意。sendRequest/onRequestExternalwindow.postMessage などを利用すれば可能。

通信周りは safari の謎構文のおかげでカオスさを増している。

Usertime : 0.1 / Systemtime : 0.01