0

自分の変数を変更するために Internet Explorer でこの単純なユーザー スクリプトを変更しようとしていますが、それは十分に単純に思えますが、変数を自分の変数に置き換えて検索および置換すると、更新しない限り、Web サイトは完全に失敗します。

(function(){

    var arrGoogleInstances = document.body.innerHTML.match(/google/ig);

    if (arrGoogleInstances != null)
    {
        if (arrGoogleInstances.length > 0)
        {
            document.body.innerHTML = document.body.innerHTML.replace(/google/ig,'guuuuuuuugle');
            document.body.innerHTML = document.body.innerHTML.replace(/Google /ig,'Guuuuuuugle');   
        }   
    }

})();

たとえば、google正規表現の用語を数字に置き換えようとしました。しかし、その後、スクリプトはまだ機能していないようで、私の Web サイトを台無しにしているようです。

その理由を誰か教えてもらえますか?

4

1 に答える 1

1

使用しないでくださいinnerHTML。(ほとんど、これまで)
に送信する値に応じて、HTML 構造自体の一部が破棄されています.replace()。また、ページを機能させるすべての JavaScript が破棄または孤立しています。

正しいアプローチは、DOM 手法を使用して、ページのテキスト ノードを再帰することです。

コードは次のようなもので、jsfiddle で実際に動作しているのを見ることができます

replaceTextValues (document.body, /Google/ig, "Guuuuuuugle");


//-- Internet explorer doesn't define DOM2 constants!
if (typeof Node != "undefined") {
    TEXT_NODE       = Node.TEXT_NODE;
    ELEMENT_NODE    = Node.ELEMENT_NODE;
}
else {
    TEXT_NODE       = 3;
    ELEMENT_NODE    = 1;
}

function replaceTextValues (node, regex, replaceWith) {
    if (node.nodeType === TEXT_NODE) {
        node.nodeValue  = node.nodeValue.replace (regex, replaceWith);
    }
    else if (node.nodeType === ELEMENT_NODE) {
        for (var K = 0, numNodes = node.childNodes.length;  K < numNodes;  ++K) {
            replaceTextValues (node.childNodes[K], regex, replaceWith);
        }
    }
}
于 2012-12-26T23:46:09.807 に答える