Глобальная переменная в расширении сафари

Как я могу иметь глобальную переменную в расширении Safari, к которой можно получить доступ из введенного скрипта и которую можно сохранить для следующего запуска после закрытия Safari.

и под глобальным я подразумеваю статический.
чтобы все внедренные скрипты обращались к одной и той же версии этой переменной, не каждый внедренный скрипт имеет свою собственную.
а не как localStorage для каждого домена.


person Khairy Abd El-Zaher    schedule 23.10.2014    source источник
comment
Safari не поддерживает доступ к вещам в глобальной области действия из области действия страницы (внедренные сценарии) и наоборот. Вы должны использовать Сообщения для обмена информацией между этими областями. Но каждая страница может получить копию одной и той же вещи из глобальной области видимости, что должно удовлетворить ваши потребности.   -  person chulster    schedule 23.10.2014


Ответы (1)


API настроек расширения Safari может быть лучшее, что можно использовать для этого. Это работает аналогично localStorage и доступно через safari.extension.settings.

Однако это недоступно напрямую из внедренных скриптов, поэтому вам необходимо использовать сообщения для передачи данных с глобальной страницы.

Что-то вроде этого в вашем внедренном скрипте:

safari.self.addEventListener('message', handleMessage, false);

safari.self.tab.dispatchMessage('getSetting', 'myVar');

function handleMessage(msg) {
    if (msg.name === 'returnSetting') {
        var setting = msg.message;
    }
}

И на вашей глобальной странице:

safari.application.addEventListener('message', handleMessage, false);

function handleMessage(msg) {
    if (msg.name === 'getSetting') {
        var setting = safari.extension.settings(msg.message);
        safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('returnSetting', setting);
    }
}

В качестве альтернативы вы можете сделать более или менее то же самое с localStorage в домене глобальной страницы, чтобы он не ограничивался веб-страницами одного домена.

person Matt Swain    schedule 23.10.2014
comment
большое спасибо, но когда я закрою сафари и снова открою его, эта переменная сохранит свое последнее значение ?? - person Khairy Abd El-Zaher; 06.11.2014
comment
Да. Настройки расширения сохраняются между сеансами. - person Matt Swain; 06.11.2014
comment
спасибо, чувак, извини, что меня не было в последнее время, я использовал твое решение и искал его в документах разработчиков Safari в здесь - person Khairy Abd El-Zaher; 10.11.2014
comment
@MattSwain В настоящее время я пытаюсь получить доступ к localStorage внутри включенного JS-файла глобальной страницы background.js. Я проверяю этот файл с помощью построителя расширений, и когда я пытаюсь получить доступ к localStorage в консоли в установленной точке останова, он кажется пустым. Любые идеи о том, как я могу получить доступ к localStorage для всех сайтов? - person Andre; 31.03.2016