在Google Chrome中注册DOMContentLoaded

时间:2011-02-22 18:12:49

标签: javascript google-chrome google-chrome-extension

在Firefox和Safari中,我设法用 window.addEventListener('DOMContentLoaded',PageShowHandler,false); 注册DOMContentLoaded事件,方法是将此语句插入到插入的js脚本中,或者更清楚,在加载页面的dom后执行,我的特定函数设置为每次加载此特定页面的DOM时运行。

我似乎无法在Chrome中执行此操作。我使用 chrome.tabs.onUpdated 等事件制作了一些技巧,但它并不适用于所有实例;所有这些事件都没有达到DOMContentLoaded所实现的目标。例如,当我点击我网页上的特定链接时,这不会注入我的代码,因为我的DOMContentLoaded事件可能已经完成。

window.addEventListener('DOMContentLoaded', PageShowHandler, false);

引入 inject.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 个答案:

答案 0 :(得分:23)

如果向清单中的内容脚本添加"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"
  }
],

(更多关于执行顺序here

答案 1 :(得分:1)

我设法通过在我注入的脚本中使用 DOMFocusIn 事件来完成工作。此事件正确模仿了 DOMContentLoaded 在Firefox和Safari中实现的触发器行为。

window.addEventListener('DOMFocusIn', PageShowHandler, false);

如果我未在“contents_scripts” 中设置 true “all_frames”字段,则无法正常工作:

{
"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"],
   "all_frames" : true
  }
],
"browser_action" : {
"default_icon" : "Quest Icon 11.png",
"default_popup": "dialog.html"
}
}