2012-08-16 1 views
2

Это мое первое расширение 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-адреса в белый список. Мое расширение только срабатывает на страницах, которые я хотел, и я могу использовать сообщения.

ответ

1

В вашей функции test на глобальной странице event не ссылается ни на что, поскольку функция не является обработчиком событий. Если вы хотите настроить таргетинг активной вкладки, используйте вместо этого:

safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('test, 'test'); 

Если позже вы обнаружите, что хотите бар расширения или глобальная страница отвечать на сообщения от введенного сценария, вы можете добавить что-то вроде этого в любом месте:

safari.application.addEventListener('message', function (e) { 
    if (e.name === 'whatever') { 
     e.target.page.dispatchMessage('foo', 'bar'); 
    } 
}, false); 

Если вы хотите отправить сообщение от введенного сценария глобальной страницы или панели расширения, используйте safari.self.tab.dispatchMessage и есть «сообщение» обработчик события на месте в глобальной странице или Удлинитель ,

+0

Это приводит меня в правильном направлении. В конечном счете, я действительно хочу, чтобы инъекционный скрипт отвечал на расширение. –

+0

Или глобальный HTML ответит на панель расширения, переключив div на страницу. –

+0

Итак, я немного поиграл, и если я установил расширение доступа к веб-сайтам для всех вместо некоторых, я могу использовать пример на этой странице: http://developer.apple.com/library/safari/#documentation/Tools/ Концептуальный/SafariExtensionGuide/AddingExtensionToolbars/AddingExtensionToolbars.html # // apple_ref/doc/uid/TP40009977-CH5-SW2 Однако, когда я устанавливаю его на некоторые и выбираю сообщение об ошибках моего домена, происходит сбой. –

 Смежные вопросы

  • Нет связанных вопросов^_^