2015-07-21 5 views
-1

Я пытаюсь передать переменную из настроек моего расширения сафари на введенный javascript. Мне удалось передать сообщение, но не знаю, как использовать переменную из области handleMessage, чтобы я мог использовать ее в моем вложенном файле. Переменная printerNAME в функции handleMessage не доступна вне функции?Настройки расширения Safari для Injected Script

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.