Как получить доступ к прослушивателям событий веб-страницы из расширения Google Chrome - PullRequest
0 голосов
/ 12 июля 2010

Я пишу расширение Chrome, чтобы вывести исходный код для каждого обработчика событий, прикрепленного к тегу <a/> при наведении на него.

В настоящее время я распечатал атрибут href - $(this).attr("href") - и это прекрасно работает. Исходный код на github на http://github.com/grantyb/Google-Chrome-Link-URL-Extension.

Когда я расширяю его для доступа к обработчикам событий, $ (this) .data ("events") возвращает null. Я уверен, что для моего тега <a/> есть обработчик click (), потому что когда я выводю $("a").data("events") внутри моей веб-страницы, он правильно отображает обработчик.

Кажется, что метод jQuery data() проверяет данные, помещенные в «песочницу», поэтому я не могу получить к ним доступ изнутри моего Расширения. Это имеет смысл, так как я думаю, что он хранится в глобальной переменной jQuery, и это явно отличается от глобальной переменной jQuery, которая находится внутри моего Расширения.

Есть ли другой способ получить доступ к списку обработчиков событий для объекта в DOM. Хранятся ли обработчики событий даже в DOM?

Ответы [ 3 ]

3 голосов
/ 13 июля 2010

Решено с потрясающим взломом!

Проверьте код на GitHub для деталей: http://github.com/grantyb/Google-Chrome-Link-URL-Extension.

Сценарий содержимого использует jQuery для добавления <script> тег прямо на страницу хоста ( вставьте маниакальный смех здесь ).Скрипт «паразит» имеет полную видимость на странице хоста, включая DOM и песочницу javascript, так как теперь он является частью страницы.Он извлекает данные, которые мне нужны, кодирует их в текстовый формат и записывает их в атрибут элемента, который я подготовил ранее.

Затем я сажусь и жду (setTimeout (..., 10))для сценария, чтобы сделать свое дело.Когда мне перезванивают, я убираю за собой и извлекаю текстовые данные прямо из элемента DOM.

Есть ли более простой способ?Это чувствует себя непослушным.

2 голосов
/ 12 июля 2010

Все ваше расширение находится в песочнице.Вы можете получить доступ к DOM из своего расширения, но не из javascript.

Единственный способ взаимодействия - это изменение DOM таким образом, чтобы ваш javascript загружался внутри веб-страницы.Но вы все равно будете в изолированной среде, поэтому вы не сможете напрямую общаться со своим расширением через javascript.

1 голос
/ 30 августа 2010

Как сказал WoLpH, ваше расширение находится в изолированной программной среде и не может получить доступ или изменить любой DOM веб-страницы.

Тем не менее, вы можете достичь своей цели «изящно», используя скрипт содержания и передачу сообщений :

  • Сценарий содержимого для доступа / изменения веб-страниц DOM
  • Передача сообщений для связи между вашим добавочным номером и веб-страницами
...