1

在尝试使用 DOM 之前,我已经尝试了几次确保 DOM 完全加载,但我似乎永远无法让 div 计数匹配。

我的测试是,我在打开开发工具的情况下运行页面,一旦页面完成,我打开控制台并运行相同的代码(document.getElementsByTagName('div').length)并且它们关闭了!

有人有任何线索吗?唯一似乎可行的事情是当我设置超时时,我想尽量远离那个......除非那是唯一的解决方案,否则我已经搜索了文章并尝试了几种解决方案,但没有运气......

这里有一些尝试......

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 发送消息,然后

内容.js

 chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
  console.log(response);
 });

背景.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);
 });
 }
});
4

1 回答 1

0

DOMContentLoaded - 可以在所有脚本处理之前发生,因此如果您有任何添加元素的 JS,这可能会解释问题。

但是我不明白您为什么会遇到问题,您正在使用 document_start 来做一些工作,但是这是尽早做您正在做的事情的方法。我不知道你为什么不把你的 DOMContentLoaded 中的逻辑包含在与你的 document_end 相同的脚本中......

于 2013-06-05T21:58:35.360 回答