глупый JS Func не определено - PullRequest
1 голос
/ 27 мая 2011

Я пишу расширение chrome, на моей странице background.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?");
}

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

Точная ошибка: Uncaught ReferenceError: thisIsUndefined не определен

Вот весь файл для справки:

http://texthmu.com/Devin/HMU%20ext/mod.js

Не могли бы вы порекомендовать любые ключевые слова, такие как'global' или 'var', которые могут исправить определение?

Ответы [ 3 ]

3 голосов
/ 27 мая 2011

Скрипты на странице и скрипты контента изолированы. Они взаимодействуют с одним и тем же DOM, но не напрямую с переменными друг друга. Когда вы добавляете onclick, она будет искать эту функцию в скриптах сайта. Лучший способ сделать это - использовать document.createElement, а затем использовать onclick или addEventListener для подключения вашей функции. Если вы хотите пойти по маршруту innerHTML, сначала добавьте его в DOM, затем найдите и прикрепите ваше событие.

http://jsfiddle.net/EjYpQ/

2 голосов
/ 27 мая 2011

Вы немного не в курсе этого из-за модели исполнения Chrome:

Содержимое скрипта выполняется в специальном Среда называется изолированным миром. У них есть доступ к DOM страница, в которую они введены, но не к любым переменным JavaScript или функции, созданные на странице. Это смотрит на каждый контент-скрипт, как будто нет другого исполняющего JavaScript на странице, на которой он запущен. Такой же верно в обратном порядке: JavaScript работает на странице не может вызвать никаких функций или получить доступ к любым переменным, определенным скрипты содержимого.

(выделено жирным шрифтом)

Источник: http://code.google.com/chrome/extensions/content_scripts.html#execution-environment

0 голосов
/ 31 мая 2011

Это лучшее решение, которое я нашел:

$("#elementID").click(function() {
    myFunc();
});
...