Javascript chrome扩展内容脚本无法按类获取元素
请看屏幕截图:Javascript chrome扩展内容脚本无法按类获取元素,javascript,class,google-chrome-extension,google-chrome-app,Javascript,Class,Google Chrome Extension,Google Chrome App,请看屏幕截图: Iframe已最小化,因此您无法看到其任何子对象 目标div显示为iframe的子级,即使我们知道事实1 扩展的内容脚本 console.log( targetDiv ) // output: undefined 谷歌浏览器控制台 console.log( targetDiv ) // output: targetDiv 这怎么可能? 在这两种情况下,其他“正常”元素都会打印出来。 你能给我解释一下这个神奇的半子元素吗 更新:此div动态创建的setInterval
console.log( targetDiv ) // output: undefined
谷歌浏览器控制台
console.log( targetDiv ) // output: targetDiv
这怎么可能?
在这两种情况下,其他“正常”元素都会打印出来。
你能给我解释一下这个神奇的半子元素吗
更新:此div动态创建的setInterval修复了问题您需要确保在DOM中的元素之后加载脚本。尝试调试它,在
控制台.log(targetDiv)
上设置断点,并手动调查DOM。例如,此元素渲染可能会因某些内部脚本而延迟。在这种情况下,您可以实施一种轮询过程来及时检测此元素:
const timer = setInterval(() => {
const myElement = document.getElementById('my-element');
if(myElement) {
clearTimeout(timer);
processMyElement(myElement);
}
}, 150);
而不仅仅是
const myElement = document.getElementById('my-element');
processMyElement(myElement);
一个简单的解决方案是在页面完全加载后运行脚本。比如:
window.onload = function() {
// run script
};
应该行得通
但是,请注意,脚本将在所有图像和css完全加载和解析后运行。您的内容脚本仅在主页中运行,而控制台“上下文”选择器设置为iframe。如果iframe的contentDocument的来源相同,或者您需要在manifest.json中为内容脚本设置
“all_frames”:true
,则需要手动访问iframe的contentDocument。我已经将all_frames设置为true。正如我在文章中所说,“其他元素在两种情况下都会打印出来。”内容scirpt也在iframe中打印出来,但没有定义。该div还用作ad的重定向。这就是为什么我要检测并删除它好吧,我不得不猜测,因为您没有提供URL来复制行为,所以我的另一个猜测是元素是动态添加的,您需要稍后使用MutationObserver或setInterval/setTimeout访问它。谢谢!设置间隔工作。。。嗯,这很愚蠢,因为我已经尝试使用setTimeout延迟2秒,但它不起作用。现在无法删除这些div,我可以手动删除,它们会在下次重新加载时消失,但从代码中我不能。有什么想法吗?@Lopol2010你什么意思myElement.style.display='none'
在呈现元素后应该可以工作,例如,您也可以将其从DOM中完全删除。谢谢您的帮助。又是我的错。。。我试着删除这个元素,但我只能从那个里打印出来。所以我只需放置setInterval 100ms,并将元素完全移除。