Как я могу реализовать "шаблон" публикации / подписки в javascript между веб-сайтом и расширением Google Chrome? - PullRequest
1 голос
/ 17 сентября 2011

Я пытаюсь реализовать шаблон pub / sub между веб-сайтом и расширением Google Chrome. До сих пор в большинстве моих экспериментов использовался jQuery из-за его сильного синтаксиса привязки / запуска, но мне не повезло.

Справочная информация: Я работаю с открытым исходным кодом, реализацией Pomodoro Technique на основе Ruby / Rails. Я изменил код сайта, чтобы показать его активность, используя синтаксис jQuery $ .trigger, чтобы публиковать наблюдаемые события для начала сеанса таймера и конца сеанса таймера. Эти триггеры работают настолько, насколько я могу отследить выполнение в коде события jQuery. Таким образом, сайт является издателем нескольких соответствующих событий.

Я реализовал завершение транзакции слушателем / подписчиком в расширении Google Chrome, загрузив jquery и используя синтаксис .bind () для привязки к пользовательским событиям, публикуемым сайтом. Расширение загружается для сайта и имеет разрешения, установленные для всех путей в URL для сайта.

Со стороны публикации я пробовал оба $ .Event.trigger () а также $ (Документ) .trigger () чтобы быть как можно более общим, на стороне подписчика я попытался связать с несколькими соответствующими элементами, наиболее общим из которых является $ (document) .bind ()

Когда я наблюдаю привязку пользовательского события путем приостановки выполнения после выполнения вызовов привязки в расширении и анализирую результаты console.dir ($ (документ) .data ( 'события')); В списке отображаются пользовательские события, на которые я пытаюсь подписаться.

Однако, когда я анализирую результаты console.dir ($ (document) .data ('events')); непосредственно перед вызовом пользовательского события на стороне веб-сайта необходимые обработчики событий не отображаются в списке.

Я упускаю что-то очевидное в том, как это должно работать?

p.s. Я должен отметить, что, если я связываюсь напрямую с событием 'click' на элементах, которые вызывают изменения, мой код расширения работает отлично, но DOM сайта изменяется во время выполнения, поэтому привязки нарушаются не слишком долго, поэтому я надеялся, что некоторые механизм паб-суб может быть более разумным.

EDIT

Как отмечалось в моем ответе на ответ @ ChrisNZL, я попробовал .live () вместо .bind () и вижу такое же поведение.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

Как вы взаимодействуете между сайтом и расширением?

Обратите внимание, что скрипты содержимого, которые вы внедряете через API-интерфейсы расширения , не могут получить доступ к JavaScript главной страницы , поэтому вы не сможете получить доступ к пользовательским событиям, которые вы экспортируете в коде jQuery.

Обходной путь для этого заключается в использовании обычной инъекции сценария глобальной области (т. Е. Добавление тега сценария к основному телу). Вы пытались это сделать?

0 голосов
/ 17 сентября 2011

Вы смотрели на jQuery .live()? Действует как .bind(), но присоединяет «обработчик к событию для всех элементов, которые соответствуют текущему селектору, теперь и в будущем », то есть привязки не должны прерываться.

...