РЕДАКТИРОВАТЬ: Как вы сказали в своем первоначальном обновлении после публикации, внедренный скрипт не имеет такого же доступа, как глобальная HTML-страница. Это мое рабочее решение, представьте, что вы хотите узнать значение параметра "foo" во вставленном скрипте:
Код введенного скрипта:
function getMessage(msgEvent) {
if (msgEvent.name == "settingValueIs")
alert("Value for asked setting is: " + msgEvent.message);
}
safari.self.tab.dispatchMessage("getSettingValue", "foo"); // ask for value
safari.self.addEventListener("message", getMessage, false); // wait for reply
Глобальный HTML-код:
function respondToMessage(messageEvent) {
if (messageEvent.name == "getSettingValue") {
// getItem("foo");
var value = safari.extension.settings.getItem(messageEvent.message);
// return value of foo to injected script
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("settingValueIs", value);
}
}
safari.application.addEventListener("message",respondToMessage,false);
Надеюсь, это поможет!
Исходное сообщение: У меня та же вторая проблема, что и у вас, я не могу получить доступ к своим настройкам (или secureSettings) из введенного скрипта. В моем случае скрипт загружается после загрузки страницы, но я не могу использовать safari.extension.settings
.
Единственный способ, которым он работает, - это панель инструментов / кнопка, HTML-код этого элемента может getItem
и setItem
, как и ожидалось.
Мой вывод заключается в том, что по какой-то причине внедренные сценарии не могут получить доступ к настройкам (фактически, они даже не имеют доступа к элементу safari
). Ошибка или предполагаемая особенность, которую нужно выяснить.