#javascript-events #google-chrome-extension #javascript
#javascript #google-chrome-расширение #dom-события
Вопрос:
Я пишу расширение для Chrome в фоновом режиме.html-страница, она вводит js-файл с помощью этой команды:
chrome.tabs.executeScript(null, {file: "mod.js"});
Весь код из этого файла выполняется на странице просто отлично, за исключением одной функции, которая не определена для onclick
свойства.
Я меняю innerHTML
главной страницы Facebook, div, который содержит «главные новости» и «самые последние»
Я вставляю этот html:
"<a href='#' onclick='thisIsUndefined()'>
<span class='someClass'>
Better feed
</span>
</a>"
И прямо в js-файле, который вводится, thisIsUndefined
прекрасно указано как:
function thisIsUndefined () {
alert("is it working yet?");
}
У меня даже есть другая функция в файле, который я использую, но всякий раз, когда я нажимаю на вставленную ссылку, я получаю сообщение об ошибке, в котором говорится, что она не определена.
Точная ошибка:
Ошибка неперехваченной ссылки: это неопределенное значение не определено
Вот весь файл для справки:
http://texthmu.com/Devin/HMU ext/mod.js
Не могли бы вы порекомендовать какие-либо ключевые слова, такие как ‘global’ или ‘var’, которые могли бы исправить определение?
Комментарии:
1. Является ли функция глупой?
2. О, в то время это действительно было так 🙂
Ответ №1:
Скрипты на странице и скрипты содержимого изолированы. Они взаимодействуют с одним и тем же DOM, но не напрямую с переменными друг друга. Когда вы добавляете onclick
, он будет искать эту функцию в скриптах сайта. Лучшим способом сделать это было бы использовать document.createElement
, а затем использовать onclick
or addEventListener
для присоединения вашей функции. Если вы хотите пройти innerHTML
маршрут, сначала добавьте его в DOM, затем найдите его и прикрепите свое событие.
Комментарии:
1. Это именно то, что нужно! Очень четкий!
Ответ №2:
Вам немного не повезло с этим из-за модели выполнения Chrome:
Скрипты содержимого выполняются в особой среде, называемой изолированным миром. У них есть доступ к DOM страницы, на которую они вводятся, но нет доступа к каким-либо переменным JavaScript или функциям, созданным страницей. Для каждого скрипта содержимого это выглядит так, как будто на странице, на которой он запущен, не выполняется другой JavaScript. То же самое верно и в обратном порядке: JavaScript, запущенный на странице, не может вызывать какие-либо функции или обращаться к каким-либо переменным, определенным скриптами содержимого.
(выделено жирным шрифтом)
Источник:http://code.google.com/chrome/extensions/content_scripts.html#execution-environment
Ответ №3:
Это лучшее решение, которое я нашел:
$("#elementID").click(function() {
myFunc();
});