我正在使用简单的内容脚本测试chrome扩展开发,该脚本遍历DOM并在找到给定字符串时返回true。
在简单的网页上,脚本100%正确返回,但在更复杂的网页上,例如谷歌搜索结果,它可能会在具有给定字符串的页面上每10次返回true。
我正在使用Crockfords DOM遍历算法,甚至尝试了不同的算法,但它给出了相同的结果。我是扩展和Javascript的新手,并且不确定这是否是某种异步问题?
var exists = false;
function walkTheDOM(node) {
// String search function
if (node.nodeType === 3)
if (node.nodeValue.indexOf("today") > -1)
exists = true;
// Continue recursive DOM traversal
node = node.firstChild;
while (node) {
walkTheDOM(node);
node = node.nextSibling;
}
return exists;
}
if (walkTheDOM(document.body))
alert("String exists in page.");
答案 0 :(得分:0)
由于页面的内容可能是动态的(在代码执行后加载了新内容),因此您有两种可能:
如果您需要在确定性时间内做出决定,请稍等一下。设置脚本开始执行时的超时,然后检查。
如果您可以更改决定,如果稍后出现一个单词,最好的办法是运行您已经运行的内容,加上set up a listener for DOM changes并分析新的/修改后的节点。
如果你的策略是“尽快检测,在确定的时间内放弃”,你可以结合使用这两种方法。