Safari扩展设置到注入脚本

时间:2015-07-21 22:15:23

标签: javascript safari safari-extension safari7 safari8

我正在尝试将我的safari扩展中的设置中的变量传递给注入的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);
}

injected.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);
}

1 个答案:

答案 0 :(得分:0)

消息传递是异步的。这意味着只要注入的脚本向全局页面发送消息,它就会继续下一行代码而不等待响应(如果有的话)。因此,任何依赖于响应的代码必须在收到响应后才能执行。因此,您的alert(printerNAME)语句应该放在handleMessage函数中。