0

Ajaxリクエストを使用してHTMLページをロードし、ページからすべてのスクリプトを抽出し、すべてのコンテンツがロードされたら実行するJavaScriptの新しいプラグインに取り組んでいます。これを行うために、私はそのようなことを試みています:

var scripts = '',
    domResponse = $('<div/>').append(HTMLresponse
        .replace(/<\s*script\s*([^>]*)>((.|\n)*)<\s*\/\s*script>/i, function($0,$1,$2){
            scripts += $2;
            return '';
        }));
// Then I load the content and I execute scripts

単一のスクリプトタグを含むページで試してみると問題なく動作しますが、次のようなページで試してみると:

<script>
   // Some javascript
</script>

<!-- SOME HTML -->

<script>
   // Another script
</script>

domResponse は空で、スクリプトには最初の <script> と最後の </script> の間にテキストが含まれています。

適切に動作させるための解決策はありますか?

4

2 に答える 2

3

あなたがやろうとしていることを理解できれば、これでうまくいきますか?

var scriptElements = document.getElementsByTagName("script");
var scripts = "";

for(var i = 0; len = scriptElements.length; i < len; i++) {
    scripts += scriptElements[i].innerHTML;
    scriptElements[i].innerHTML = "";
}

// load content and execute scripts
于 2012-05-10T16:10:43.227 に答える
0

他の人たちと同じように、HTML 関連には正規表現を使用しないことをお勧めします。

しかし、それを無視して、私はまだあなたの質問に答えることができます. あなたの問題は、貪欲な量指定子を使用していることです。つまり、で終わる限り、可能な(.|\n)*限り「食べます」。あなたが望むのは、次のような貪欲でない quantifierです。</script>

<\s*script\s*([^>]*)>((.|\n)*?)<\s*\/\s*script>

こちらをご覧ください: http://rubular.com/r/U2vvOW6XfZ .

>スクリプト タグ内のいずれかの属性に;が含まれていると、正規表現が壊れることに注意してください。何らかの理由でスクリプトに a が含まれて</script>いる場合 (おそらくコメント内); 一般に、ページがスクリプトをコメントアウトしている場合。これが、パーサーを使用する方がはるかに優れている理由です。

于 2012-05-10T20:12:09.783 に答える