2015-07-21 94 views
-1

我试图从Safari Safari扩展中的设置中将变量传递给注入的JavaScript。我设法让消息通过,但不知道如何使用handleMessage作用域的变量,所以我可以在我的注入文件中使用它。 handleMessage函数中的变量printerNAME似乎无法在函数外部访问?注入脚本的Safari扩展设置

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

回答

0

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

相关问题