2012-04-17 2 views
0

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

Предложения (тестирование не проводилось):

  1. Одно расширение открывает скрытую вкладкудо: пустой # расширения канала с openTab(). Другой ищет эту вкладку по URL-адресу и находит ее. Они производят и потребляют элементы на этой странице для общения.

  2. Если расширения могут читать файлы cookie через домены, один устанавливает cookie со случайным идентификатором на extension-homepage.com, а другой читает его. Затем они создают события DOM с именем extension-message-[the random ID]», так что страница не может слушать

  3. Петицию разработчики Safari добавить onRequestExternal их API;.)

Вы можете думать о другом подходе ? вы получили какой-либо из вышеперечисленного работать?

+0

Я не пробовал это сам, но мог бы [window.postMessage] (https://developer.mozilla.org/en/DOM/window.postMessage) помочь? – canisbos

ответ

0

можно использовать window.postMessage для передачи сообщений между расширениями, со страницей в текущей вкладке в качестве посредника.

Я поделился две версии y простые демонстрационные расширения в качестве доказательства концепции на https://github.com/canisbos/ClickClack. Если вы их установили, вы увидите, что нажатие кнопки на панели инструментов внутреннего абонента приведет к перевороту изображения кнопки другого.

+0

Это не означает, что страница знает, какие расширения установлены? Он также может слушать эти сообщения. –

+0

Я полагаю, вы правы. – canisbos

0

Пусть расширение А открыть WebSocket подключения к серверу WebSocket реализован в JavaScript, путем расширения B. См socket.io, WebSocket-Node и т.д. Позволяет надежный двунаправленный комлинк между двумя расширениями, или между расширением и внешним миром.

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