Safari Extensionの通信


ややこしい上に公式ドキュメントでは分かりにくいし、ネット上にも情報が少ないのでメモ。

間違っていたら指摘お願いします。

1.PopOver編

popoverが呼び出される際に起こるイベントのリスナー

//popover.html
safari.application.addEventListener("popover", functionName, true);

popoverのHTMLに記述。popoverのHTMLに関数を置く

popover内からglobalページにアクセスする

//popover.html
safari.extension.globalPage.contentWindow.hoge();

hoge();はglobalページ内の関数。引数や戻り値の設定も可。

popoverを呼び出す

//global.html
safari.extension.toolbarItems[i].showPopover();

globalページなどで呼び出す。
iはボタンの配列。(ボタンが1個なら0)
popoverのコンテンツをglobalでダイナミックに作る場合も、最後にこれを叩く。

2.Message編

injectからglobalへ

//inject.js
safari.self.tab.dispatchMessage(name,hoge);

nameはmessageの名前。
hogeは送信する変数。

//global.html
function huga(e){
    console.log(e.message);
    console.log(e.name);
}
safari.application.addEventListener("message",huga, false);

hugaは関数名。e.messageで渡された変数を受信。
e.nameでmessageの名前を参照。

globalからinjectへ

//global.html
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage(name,hoge);

nameはmessageの名前。
hogeは送信する変数。

//inject.js
safari.self.addEventListener("message",huga,false);

hugaは関数名。