在尝试使用DOM之前,我尝试过多次尝试确保DOM已完全加载,我似乎永远无法让div计数匹配。
我的测试是,我打开dev工具打开页面,一旦页面完成,我打开控制台并运行相同的代码(document.getElementsByTagName('div')。length)然后它们就关闭!!
任何人都有任何线索?唯一可行的是当我设置超时时,我想尽量远离那个...除非那是唯一的解决方案,我已经搜索了文章并尝试了几种解决方案,但没有运气... < / p>
这里有一些尝试......
1)清单文件有content_scripts / run_at:“document_start”
document.addEventListener('DOMContentLoaded', function () {
var count = document.getElementsByTagName('div').length;
console.log(count);
}, true);
2)清单文件有content_scripts / run_at:“document_end”;我基本上向background.js发送一条消息,然后发送消息回运行功能。
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response);
});
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
console.log(request);
divCount();
});
function divCount() {
var count = document.getElementsByTagName('div').length;
console.log(count);
}
2)清单文件有content_scripts / run_at:“document_end”;我基本上向background.js发送消息然后
content.js
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response);
});
background.js
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
chrome.tabs.executeScript(null, {
code: "console.log($('div').length)"
}, function(data) {
console.log(data);
});
});
我也试过这个:
chrome.tabs.onUpdated.addListener(function( tabId , info ) {
console.log(tabId, info);
if ( info.status == "complete" ) {
chrome.tabs.executeScript(null, {
code: "console.log($('div').length)"
}, function(data) {
console.log(data);
});
}
});
答案 0 :(得分:0)
DOMContentLoaded - 可以在所有脚本处理完之前发生,所以如果你有任何添加了元素的JS,这可能会解释这个问题。
但是,我不明白你为什么遇到问题,你正在使用document_start做一些工作,但这是早做你正在做的事情的方法。我不确定你为什么不在DOMContentLoaded中包含与document_end相同的脚本中的逻辑......