Это мое первое расширение Safari, и до сих пор мне немного нравилось. Я пытаюсь добавить панель расширения, которая взаимодействует со страницей injected.js и переключает элементы на страницах через jquery .toggle();Расширение Safari - Сообщение
Я смог загрузить jQuery на страницу без проблем, однако, когда дело доходит до отправки сообщения с расширительной строки на injected.js, я не понимаю. Сегодня я провел более 8 часов, просматривая страницы разработчиков на Apple. Единственное, что мне удалось сделать, это
Bar Расширение:
<!DOCTYPE html>
<html>
<head>
<title>Board Tools</title> <!-- Extension Bar -->
<script type="text/javascript" src="jQuery.min.js"></script>
<script type="text/javascript">
const myGlobal = safari.extension.globalPage.contentWindow;
function ToggleBoard(){
myGlobal.test();
}
</script>
</head>
<body>
<input type="button" id="board" value="Board Toggle" onClick="ToggleBoard();">
</body>
</html>
Global HTML:
<!DOCTYPE HTML>
<html>
<head>
<title>global page</title>
<script type="text/javascript">
function test() {
alert("1");
event.target.page.dispatchMessage("test", "test");
alert("2");
}
</script>
</head>
<body> </body>
</html>
Injected.js:
function test(msgEvent) {
alert(msgEvent.name);
}
// register for message events
safari.self.addEventListener("message", test, false);
Я могу назвать ToggleBoard() из панели расширения. Функция ToggleBoard() может вызывать функцию test() из глобального HTML. Когда функция test() вызывается на глобальной странице HTML, срабатывает кулачный сигнал, второй - нет. Я сузил его, по крайней мере, так далеко. Я получаю способ, которым я пытаюсь отправить свое сообщение, вероятно, ошибается, но вот что здесь написано: http://developer.apple.com/library/safari/#documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html#//apple_ref/doc/uid/TP40009977-CH14-SW1
Просто чтобы узнать, была ли ошибка с моей стороны или что-то глупое со страницы разработки Я скопировал точную код на их странице и использовал только глобальные HTML и Injected.js, и я до сих пор не получил результат, который я искал.
Решено: Ответ, который я выбрал, очень много касается проблемы, которую я имел. Это был не точный ответ, но он сделал это, вместе с комментариями помог мне разобраться в моем коде. Чтобы правильно получить различные компоненты расширения, мне нужно было установить расширенный удаленный доступ для всех, а затем добавить URL-адреса в белый список. Мое расширение только срабатывает на страницах, которые я хотел, и я могу использовать сообщения.
Это приводит меня в правильном направлении. В конечном счете, я действительно хочу, чтобы инъекционный скрипт отвечал на расширение. –
Или глобальный HTML ответит на панель расширения, переключив div на страницу. –
Итак, я немного поиграл, и если я установил расширение доступа к веб-сайтам для всех вместо некоторых, я могу использовать пример на этой странице: http://developer.apple.com/library/safari/#documentation/Tools/ Концептуальный/SafariExtensionGuide/AddingExtensionToolbars/AddingExtensionToolbars.html # // apple_ref/doc/uid/TP40009977-CH5-SW2 Однако, когда я устанавливаю его на некоторые и выбираю сообщение об ошибках моего домена, происходит сбой. –