2

safari.extension.globalPage.contentWindow を使用してグローバル ページの関数を呼び出す代わりに、dispatchMethod() を使用してポップオーバーからグローバル ページにメッセージを渡す方法はありますか。

現在、Web ページ内で動的に作成された iframe を使用して、ポップオーバーをシミュレートしています。これは、Safari のメッセージ パッシングを使用してグローバル ページと通信します。だから私はこれと、後のSafariバージョンの新しいポップオーバーをサポートしたいと思っています.

ポップオーバーとグローバル ページの間でメッセージをやり取りすると、コードを再利用するのに役立ちます。

ありがとう

4

1 に答える 1

0

ポップオーバーがdispatchMessageを使用してメッセージをグローバルページにディスパッチする方法、またはその逆の方法があるようには見えません。ただし、HTML5標準のwindow.postMessageを使用して同等の処理を行うことはできますが、変更を加えずに既存のコードを再利用することはできません。

ポップオーバーからpostMessageを使用するには、次のようにします。

var gw = safari.extension.globalPage.contentWindow;
gw.postMessage("hello there", window.location.origin);

そして、グローバルページでそれを受け取るには:

window.addEventListener('message', function (msg) {
    if (msg.origin == window.location.origin) {
        msg.source.postMessage("got your message", window.location.origin);
        doSomethingWithMessageData(msg.data);
    }
}, false);

このメッセージングプロトコルは、拡張機能固有のプロトコルと十分に類似しているため、既存のコードのほとんどを再利用できますが、薄い抽象化レイヤーが追加されています。

于 2013-03-14T03:18:26.787 に答える