Google chrome extension 在chrome扩展中侦听头部加载事件

Google chrome extension 在chrome扩展中侦听头部加载事件,google-chrome-extension,event-handling,dom-events,Google Chrome Extension,Event Handling,Dom Events,我试图在用户可以查看之前插入一个css文件(第一个样式是空白的,第二个是黑色的,所以您可以看到更改) 为此,我在document_start上加载我的内容js 但是我不能在head元素上添加侦听器,因为它不存在(=null) 因此,我正在寻找一种捕获head标记的onload事件的方法 谢谢,看看这个问题,它是公认的答案。DOM内容尚未加载到document\u start上,但JavaScript的document对象已加载 因此,您可以监听事件,该事件在加载DOM后立即触发 以下是您的内容脚

我试图在用户可以查看之前插入一个css文件(第一个样式是空白的,第二个是黑色的,所以您可以看到更改)

为此,我在document_start上加载我的内容js

但是我不能在head元素上添加侦听器,因为它不存在(=null)

因此,我正在寻找一种捕获head标记的onload事件的方法

谢谢,

看看这个问题,它是公认的答案。DOM内容尚未加载到
document\u start
上,但JavaScript的
document
对象已加载

因此,您可以监听事件,该事件在加载DOM后立即触发

以下是您的内容脚本的外观示例:

document.addEventListener("DOMContentLoaded", function(event) {
    console.log(document.getElementsByTagName("head")[0].innerHTML);
});
您可以改为使用,它可以在
文档开始时访问
,有关更多详细信息,请参阅此线程:

manifest.json

{
    "name": "36695983",
    "version": "0.1",
    "manifest_version": 2,
    "content_scripts": [
        {
            "js": [
                "content.js"
            ],
            "matches": [
                "<all_urls>"
            ],
            "run_at": "document_start"
        }
    ],
    "web_accessible_resources": [
        "content.css"
    ]
}
我用这个:

var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (!mutation.addedNodes) return
    for (var i = 0; i < mutation.addedNodes.length; i++) {
      // do things to your newly added nodes here
      var node = mutation.addedNodes[i];
      if(node.nodeName == "HEAD"){
        //make stuff when head load

        //don't forget to stop listener
        observer.disconnect();        
      }
    }
  })
})

observer.observe(document, {
    childList: true
  , subtree: true
  , attributes: false
  , characterData: false
})
var observer=新的突变观察者(函数(突变){
突变。forEach(功能(突变){
如果(!mutation.addedNodes)返回
对于(var i=0;i
以及如何在头部添加脚本标记?document.head对象为空。。。我正在尝试使用MutationObservermoment@thib3113,可能我误解了,所以您希望在当前网页不受您控制的情况下将css插入该网页?我以为页面是你的,所以你可以直接在html@thib3113,您可以使用
document.documentElement
,请参见更新的答案。我无法更新html文件,我不是网站的所有者。我不相信你的回答。。。。我已经找到了办法,所以我会的update@thib3113,我更新了我的答案,
content.js
将在构建dom之前加载,只需使用
document.documentElement.appendChild(您的css标记)
插入css,这发生在“用户可以查看”之前
var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (!mutation.addedNodes) return
    for (var i = 0; i < mutation.addedNodes.length; i++) {
      // do things to your newly added nodes here
      var node = mutation.addedNodes[i];
      if(node.nodeName == "HEAD"){
        //make stuff when head load

        //don't forget to stop listener
        observer.disconnect();        
      }
    }
  })
})

observer.observe(document, {
    childList: true
  , subtree: true
  , attributes: false
  , characterData: false
})