遍历DOM以便正确返回字符串,有时

时间:2016-05-11 05:59:25

标签: javascript dom google-chrome-extension

我正在使用简单的内容脚本测试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 个答案:

答案 0 :(得分:0)

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

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

  2. 如果您可以更改决定,如果稍后出现一个单词,最好的办法是运行您已经运行的内容,加上set up a listener for DOM changes并分析新的/修改后的节点。

  3. 如果你的策略是“尽快检测,在确定的时间内放弃”,你可以结合使用这两种方法。