Функция не определена при создании скрипта содержимого расширения Chrome - PullRequest
3 голосов
/ 02 марта 2011

Я пишу скрипт содержимого Chrome, и когда я внедряю его в DOM:

"<a href='#' onclick='alert(\"Hi!\");return false;'>Hi</a>"

работает нормально (предупреждение появляется, когда я нажимаю на него), однако, если я создаю функцию для предупреждения, она скажет, что функция не определена Пример:

"<a href='#' onclick='alertPlease(\"Hi!\");return false;'>Hi</a>"

function alertPlease(x){
     alert(x);
}

Весь мой код - один и тот же файл js скрипта контента.

Нужно ли размещать какой-либо код, который можно использовать после загрузки в другой файл js в фоновом режиме? Я попытался добавить фоновую страницу с помощью alertPlease (); функция, но это тоже не сработало.

Любая подсказка будет принята с благодарностью!
Спасибо!

Ответы [ 2 ]

10 голосов
/ 02 марта 2011

Сценарии содержимого выполняются в " изолированном мире ." Сценарии веб-страницы и содержимого не могут видеть переменные JavaScript друг друга (хотя они могут видеть один и тот же DOM). Когда вы добавляете атрибут onclick в DOM, обработчик создается в мире веб-страницы , а не в мире extension , поэтому код не может получить доступ к другая функция, которую вы определили. Вместо использования обработчика onclick вы должны определить прослушиватель событий в чистом Javascript, а затем использовать addEventListener для его подключения.

Изолированные миры - это функция улучшения безопасности и стабильности. То же самое происходит, если вы разрабатываете в изолированной программной среде Greasemonkey в Firefox .

0 голосов
/ 02 марта 2011

Укажите любые сценарии в файле manifest.json в разделе "content_scripts"

{
  "name": "My Extension",
  "content_scripts": [{
    "matches": ["<all_urls>"],
    "css": ["style.css"],
    "js": ["jquery-1.5.js", "script.js"]
  }]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...