-1

我正在尝试将我的 safari 扩展中的设置中的变量传递给注入的 javascript。我设法让消息传递,但不知道如何在 handleMessage 范围之外使用该变量,以便可以在注入的文件中使用它。handleMessage 函数中的变量printerNAME似乎无法在函数外部访问?

全局.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 回答