Events Chrome扩展:何时读取标签(<;头>;
我正在编写一个GoogleChrome扩展,其中我解析任何加载页面的Events Chrome扩展:何时读取标签(<;头>;,events,google-chrome-extension,html-head,Events,Google Chrome Extension,Html Head,我正在编写一个GoogleChrome扩展,其中我解析任何加载页面的标记,并查找特定的标记。内容脚本用于与站点通信,然后在后台脚本中完成实际逻辑 问题是背景脚本何时应该要求内容脚本检查标记chrome.webNavigation.onDOMContentLoaded似乎是安全的,但我发现在加载页面时,此事件通常会被多次触发。另外,可能在chrome.webNavigation.onDOMContentLoaded点击之前可用。这就引出了一个问题: 如何最好地检查页面的部分何时加载?因为您正在向所
标记,并查找特定的
标记。内容脚本用于与站点通信,然后在后台脚本中完成实际逻辑
问题是背景脚本何时应该要求内容脚本检查
标记chrome.webNavigation.onDOMContentLoaded
似乎是安全的,但我发现在加载页面时,此事件通常会被多次触发。另外,
可能在chrome.webNavigation.onDOMContentLoaded
点击之前可用。这就引出了一个问题:
如何最好地检查页面的
部分何时加载?因为您正在向所有页面中注入内容脚本,所以任务可以在其中完成,而不是总是等待页面完全加载(可能需要很长时间,具体取决于连接速度和其他因素)
在文档加载开始时注入内容脚本,并使用attached todocument.head
在页面加载过程中插入DOM时立即获得结果。观察者将只观察HEAD
元素的直接子元素,这样就不会影响性能
一些站点可能会在页面加载后添加meta
元素-这将被观察者捕获
- manifest.json:
“内容脚本”:[{ “匹配项”:[“”], “js”:[“content.js”], “运行时间”:“文档开始” }],
- content.js:
如果存在
,则查找所需的HEAD
元素,否则等待插入meta
HEAD
观察if(document.head){ 主考人(); }否则{ 新的突变观察者(功能(突变){ if(文件头){ 这个.disconnect(); 主考人(); } }).observe(document.documentElement,{childList:true}); } 职能考官(){ var节点=document.head.getElementsByTagName('meta'); 对于(var i=0;i
并检查每个新元素是否为一个文档。标题
例如,让我们查找函数observeHead(){ 新的突变观察者(功能(突变){ 对于(var i=0;i<0.length;i++){ 变量节点=突变[i]。添加节点; 对于(var j=0;j
,并向后台脚本发送一条值为
属性的消息content
您可能还希望处理其他类型的突变,如函数reportMetaNode(n){ console.log(n,n.outerHTML); 如果(n.name==“twitter:app:id:googleplay”){ chrome.runtime.sendMessage({gotMeta:n.content}); 返回true; } 返回false; }
和characterData
,因为某些站点可能会在单独的步骤中更改或添加元素(createElement、setAttribute、附加子文本节点等),在这种情况下,观察者回调将更加复杂,在attributes
参数中需要observe()
subtree:true
onDOMContentLoaded
每帧只能触发一次。如果您只对顶层框架感兴趣,请检查details.frameId===0
。如果它在每次页面加载时被触发不止一次,那么它就是一个bug。