-1

サファリ拡張機能の設定から注入された JavaScript に変数を渡そうとしています。メッセージを渡すことができましたが、変数を handleMessage スコープ外で使用する方法がわからないため、挿入したファイルで使用できます。handleMessage 関数の変数printerNAMEは、関数の外部からアクセスできないように見えますか?

global.html

safari.application.addEventListener('message', handleMessage, false);

function handleMessage(msg) {
    if(msg.name === 'printerName') {
        alert(msg.message);
    }
    var printerName = safari.extension.settings.printerName;
    safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('printerName', printerName);
}

注入された.js

var printerNAME;

function handleMessage(msg) {
    if(msg.name === 'printerName') {
        printerNAME = msg.message;
    }
}

if (window.top === window) {
    safari.self.addEventListener('message', handleMessage, false);
    safari.self.tab.dispatchMessage('printerName', printerNAME);

    alert(printerNAME);
}
4

1 に答える 1

0

メッセージの受け渡しは非同期です。つまり、挿入されたスクリプトがグローバル ページにメッセージを送信するとすぐに、応答 (存在する場合) を待たずに次のコード行に進みます。したがって、応答に依存するコードは、応答を受信した後にのみ実行する必要があります。したがって、alert(printerNAME)ステートメントはhandleMessage関数内に配置する必要があります。

于 2015-07-23T14:33:24.337 に答える