Как могут выполняться атрибуты инициируемого события введенных html-тегов, которые ссылаются на функции в скрипте содержимого расширения firefox?

#javascript #firefox-addon

#javascript #firefox-дополнение

Вопрос:

Я создаю свое первое расширение firefox. Доступная документация, предоставленная Mozilla, не очень подробная, и приведенные скудные примеры не помогают ответить на мой вопрос.

Мое расширение использует скрипт содержимого для изменения веб-страницы путем введения html-тегов. Некоторые из этих тегов имеют атрибуты события, такие как onmouseenter и onmouseleave, которые ссылаются на функции в скрипте содержимого. Однако, хотя html успешно внедряется на веб-страницы, инициируемые события выдают ошибку ссылки, и поэтому функция не выполняется.

 <span onmouseenter='onMouseEnter(this)'>Hello</span>
  

На данный момент в моем исследовании, я думаю, я обнаружил возможную проблему. Сценарий содержимого находится в другой области, и, следовательно, инициируемые события не могут получить доступ к функциям в сценарии содержимого.

 function onMouseEnter(e){
   alert(e.innerText);
}
  

Что я могу сделать, чтобы это сработало?

 "content_scripts": [
 {
    "matches": ["<all_urls>"],
    "js": ["js/content_script.js"],
    "css": ["css/style.css"]    
 }
],
  

Комментарии:

1. Можете ли вы прикрепить прослушиватель с помощью Javascript вместо встроенного атрибута HTML (который обычно считается плохой практикой)?

2. Спасибо за определенную производительность. Это то, что мне нужно было сделать. Теперь это работает. Я опубликую пример решения, чтобы другие, кто в будущем будет искать ответ, получили представление о том, что делать.

Ответ №1:

Спасибо CertainPerformance за ваш комментарий. Это привело меня к решению.

это то, что я сделал

 function tester5(){
   var firstelementtags = document.getElementsByClassName(class_tag1);
   for(i=0; i<firstelementtags.length; i  ){
       firstelementtags[i].addEventListener("mouseenter", onMouseEnter);
   }
   var secondelementtags = document.getElementsByClassName(class_tag2);
   for(j=0; j<secondelementtags.length; j  ){
      secondelementtags[j].addEventListener("mousleave", onMouseLeave);
      secondelementtags[j].addEventListener("click", onClick);
   } 
}