DOMをトラバースし、指定された文字列が見つかった場合にtrueを返す単純なコンテンツスクリプトでクロム拡張の開発をテストしています。DOMをトラバースすると文字列が正しく返される
単純なWebページでは、スクリプトは正しく100%が返されますが、より複雑なページに表示されます。 Google検索結果の場合、指定された文字列を持つページで10回ごとにtrueを返します。
私はCrockfords DOM traversalアルゴリズムを使用していますが、別のアルゴリズムを試したこともありますが、同じ結果が得られます。私は拡張機能や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.");
なぜ* document.body.textContent *を使用しないのですか?また、たとえテキストが最初に見つかったとしても、これは "DOMを"歩いて行きます。 – RobG
ありがとう、私はそれについて知らなかったし、 'document.body.textContent.indexOf(" string ")'はうまくいきます。私が使用しているDOMのトラバーサル手法がなぜそんなに信頼性のないところに戻ったのかを知ることはまだ興味深いでしょう。 – CBerry
このチェックはいつ実行していますか?ページに動的コンテンツが挿入されていて、すぐに確認している可能性がありますか? –