Javascript 浏览器扩展内容脚本不支持';我不能更新一切

Javascript 浏览器扩展内容脚本不支持';我不能更新一切,javascript,firefox,google-chrome-extension,Javascript,Firefox,Google Chrome Extension,我目前正在尝试为Firefox和Chrome做一个扩展,它可以随时将页面中的12小时格式转换为24小时格式。我已经编写了代码,但是在我测试过的站点上,它通常不会更新任何东西,尽管控制台显示时间已经过了。在一些情况下,一些节点被更新,但不是所有节点都被更新,而且不一致 “内容脚本”:[ { “匹配项”:[ "" ], “js”:[ “content_script.js” ], “运行时间”:“文件空闲”, “所有帧”:正确 } ] const标记=['p','div','span', ‘h1’、

我目前正在尝试为Firefox和Chrome做一个扩展,它可以随时将页面中的12小时格式转换为24小时格式。我已经编写了代码,但是在我测试过的站点上,它通常不会更新任何东西,尽管控制台显示时间已经过了。在一些情况下,一些节点被更新,但不是所有节点都被更新,而且不一致

“内容脚本”:[
{
“匹配项”:[
""
],
“js”:[
“content_script.js”
],
“运行时间”:“文件空闲”,
“所有帧”:正确
}
]
const标记=['p','div','span',
‘h1’、‘h2’、‘h3’、‘h4’、‘h5’、‘h6’,
“strong”、“em”、“blockquote”,
‘li’、‘td’、‘dt’、‘dd’];
const queryStr=tags.join(',');
const nodes=document.queryselectoral(queryStr);
设置超时(()=>{
processNodes();
}, 2500)
const processNodes=()=>nodes.forEach((node,i)=>{
if(node.innerHTML.match(/((1[0-2]| 0?[1-9])(:|h)([0-5][0-9])?([AaPp][Mm])/){
console.log('=============');
log('Before:');
log(node.innerHTML);
node.innerHTML=node.innerHTML.replace(/((1[0-2]| 0?[1-9])(:| h)([0-5][0-9])?([AaPp][Mm])/,(匹配)=>{
const phase=match.substring(match.length-2,match.length).toUpperCase();
常量hSeperator=match.includes('h');
匹配=匹配。替换(/[AaPp][mM]/,“”);
常量hmArray=match.split(/:| h/).map(str=>Number(str));
常量军事=hmArray[0]+(相位=='PM'&&hmArray[0]<12?12:0);
返回`${millity<10?'0'+millitary:millitary}${hSeperator'h':':'}${hmArray[1]<10?'0'+hmArray[1]:hmArray[1]}`
})
log('After:');
log(node.innerHTML);
console.log('=============')
}
});

现代网站使用JavaScript构建自己,JavaScript在内容脚本运行后异步运行。它可能需要超过您正在使用的2500毫秒的超时时间。解决方案是使用MutationObserver()。另外,永远不要修改页面的
innerHTML
,因为您正在破坏JavaScript附带的所有事件侦听器(正确操作)。感谢您指出@wOxxOm!我通过这两种来源的结合,成功地使它工作起来。