Сценарий
Я пишу расширение для Chrome / userscript, чтобы добавить немного удобства для стороннего сайта.Страница, для которой сделано расширение, имеет несколько элементов, к которым прикреплены click
прослушиватели событий (для каждого элемента, без всплывающих окон) через addEventListener (onclick
и другие свойства пусты).Мое расширение клонирует (cloneNode
) один из элементов и добавляет его в список.
Например,
<div id="list">
<div id="d1">A</div>
<div id="d2">B</div>
<div id="d3">C</div>
</div>
мое расширение добавит элемент D.
Проблема
Расширение списка работает нормально, но при нажатии на исходные узлы они выполняют ожидаемое действие, а нажатие на новый - ничего не делает.
Тесты
Тест 1
Я проверил прослушиватели событий элементов в инструментах разработчика Chrome и попытался скопировать анонимную функцию в мои новые элементы с помощью addEventListener
(не забудьте дублироватьпараметры), но это не сработало.Он выполнил некоторые из ожидаемых действий, но не все из них.
Тест 2
Я попробовал предложение anfilat использовать трюк из этого вопроса .Я вставил script
блок, который затем вызывал addEventHanlder
для нового узла, и у него действительно был новый обработчик (с sourceName
, ссылающимся на сайт - страницу, а не файл .JS
- вместорасширение), однако он по-прежнему выдает ошибку переменной not found.
Гипотеза
Я подозреваю, что это проблема домена, потому что обработчик кликов вызывает функцию во внешнем .JS
, как указано в sourceName
и lineNumber
прослушивателя событий, как показано ниже,Обратите внимание, что listenerBody
идентичен, но источники отличаются.
Вопрос
Есть ли способ получить доступ, скопировать или клонировать обработчики элемента и / или отредактировать lineNumber
и sourceName
?
Приложение A: Диаграммы
Рисунок 1 : Обработчики оригинальных элементов, ссылающиеся на .JS
на сайте (с небольшими правками имени файла):
Рисунок 2 : обработчики новых элементов, относящиеся к расширению: