Регистрация DOMContentLoaded в Google Chrome
в Firefox и Safari мне удалось зарегистрировать событие DOMContentLoaded с помощью окно.addEventListener ('DOMContentLoaded', PageShowHandler, false); вставив этот оператор в сценарий js, который вставляется или, более четко, выполняется после загрузки dom страницы, мои конкретные функции удалось запустить при каждом загрузке DOM этой конкретной страницы.
Я не могу сделать это в Chrome. Я сделал какой-то трюк с chrome.вешалки.onUpdated et al события, но это не работает в каждом случае; все эти события не складываются с тем, что достигает DOMContentLoaded. Например, когда я нажимаю на определенные ссылки на моей веб-странице, это не вводит мой код, как могло бы сделать мое событие DOMContentLoaded.
window.addEventListener('DOMContentLoaded', PageShowHandler, false);
представил в впрыснуть.js кажется, не регистрирует событие.
это манифест:
{
"name" : "gMail Adder ",
"version" : "1.0",
"description" : "Google Chrome Gmail Adder",
"options_page": "options.html",
"background_page": "background.html",
"run_at": "document_start",
"permissions": [
"tabs",
"history",
"http://*/*",
"https://*/*"
],
"content_scripts": [
{
"matches": ["*://*.google.mail.com/*", "https://*.google.mail.com/*" ,"http://mail.google.com/*" ,"https://mail.google.com/*", "https://www.google.com/*", "http://www.google.com/*", "file:///*"],
"css": ["toggle.css"],
"js": ["jquery-1.4.4.min.js", "inject.js"]
}
],
"browser_action" : {
"default_icon" : "Quest Icon 11.png",
"default_popup": "popup.html"
}
}
2 ответов
Если добавить "run_at":"document_start"
флаг для сценариев содержимого в манифесте они будут введены до создания DOM, поэтому DOMContentLoaded
должен срабатывать каждый раз:
"content_scripts": [
{
"matches": ["*://*.google.mail.com/*", "https://*.google.mail.com/*" ,"http://mail.google.com/*" ,"https://mail.google.com/*", "https://www.google.com/*", "http://www.google.com/*", "file:///*"],
"css": ["toggle.css"],
"js": ["jquery-1.4.4.min.js", "inject.js"],
"run_at": "document_start"
}
],
(подробнее о порядке исполнения здесь)
мне удалось заставить вещи работать с помощью DOMFocusIn событие в моем введенном скрипте. Это событие правильно имитирует поведение триггера, которое DOMContentLoaded достигает в Firefox и Safari.
window.addEventListener('DOMFocusIn', PageShowHandler, false);
это не работает должным образом, если я не установлен в правда на "all_frames"