【问题标题】:Safari Extension Settings to Injected Script注入脚本的 Safari 扩展设置
【发布时间】:2015-07-21 22:15:23
【问题描述】:

我正在尝试将一个变量从我的 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);
}

【问题讨论】:

    标签: javascript safari safari-extension safari7 safari8


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      相关资源
      最近更新 更多