遍历DOM查找字符串有时会正确返回
Traversing DOM for string returns correctly, sometimes
我正在用一个简单的内容脚本测试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.");
由于页面的内容可能是动态的(在代码执行后加载新内容),因此有两种可能性:
-
如果你需要在确定的时间内做出决定,请稍等。设置脚本开始执行时的超时时间,然后进行检查。
-
如果您可以在稍后出现单词时更改决策,那么最好的选择是运行您已经在运行的内容,并为DOM更改设置一个监听器,并分析新的/修改的节点。
如果你的策略是"尽快检测,在确定的时间内放弃",你可以将这两种方法结合起来。
相关文章:
- 遍历DOM查找字符串有时会正确返回
- 在 Reactjs 中返回 [Object object] 而不是 Dom 字符串
- 窗口对象属性返回一个dom节点
- JavaScript-所有DOM操作函数都返回null/empty
- 返回所有DOM元素的数组,按深度排序
- 返回的y值大于实际y位置[JS(无jQ)/DOM]
- element.html() 在 DOM 就绪时返回空
- 如何使用 javascript 返回 DOM 元素的 id,而不是元素的值
- 获取所选 DOM 元素的索引,返回 -1
- getElementById 在加载 dom 后返回未定义
- 扫描 DOM 并返回或操作具有以特定字符串为前缀的特定属性的元素
- jQuery.find() 返回一个对象,即使 DOM 中没有匹配的子元素
- document.getElementById 是否返回一个实时 dom 元素
- 如何从 Javascript 数组中获取两个最大的整数并将值返回给 DOM
- querySelector 返回 String 而不是 DOM-Element
- JavaScript - 了解返回 DOM 元素的方法链
- 新添加的元素无法使用 jQuery API closest() 在 DOM 树中向上遍历其祖先,返回“undefined
- 如何让Handlebars模板返回DOM元素而不是HTML字符串
- 从json返回dom元素
- 这个函数能返回DOM元素吗?