遍历DOM查找字符串有时会正确返回

Traversing DOM for string returns correctly, sometimes

本文关键字:返回 DOM 查找 字符串 遍历      更新时间:2023-09-26

我正在用一个简单的内容脚本测试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.");

由于页面的内容可能是动态的(在代码执行后加载新内容),因此有两种可能性:

  1. 如果你需要在确定的时间内做出决定,请稍等。设置脚本开始执行时的超时时间,然后进行检查。

  2. 如果您可以在稍后出现单词时更改决策,那么最好的选择是运行您已经在运行的内容,并为DOM更改设置一个监听器,并分析新的/修改的节点。

如果你的策略是"尽快检测,在确定的时间内放弃",你可以将这两种方法结合起来。