Настройки расширения Safari для внедренного скрипта

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

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 ответ

Передача сообщений асинхронна. Это означает, что как только внедренный скрипт отправляет сообщение на глобальную страницу, он переходит к следующей строке кода, не ожидая ответа (если таковой имеется). Поэтому любой код, который зависит от ответа, должен выполняться только после того, как ответ получен. Так что ваши alert(printerNAME) Заявление должно идти внутрь handleMessage функция.

Другие вопросы по тегам