我正在尝试将我的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);
}
答案 0 :(得分:0)
消息传递是异步的。这意味着只要注入的脚本向全局页面发送消息,它就会继续下一行代码而不等待响应(如果有的话)。因此,任何依赖于响应的代码必须在收到响应后才能执行。因此,您的alert(printerNAME)
语句应该放在handleMessage
函数中。