0

次のように、新しく作成された iframe に HTML スニペットを読み込もうとしています。

<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body>
<script type="text/javascript">
    var iframeId = "frame"
            + Math.floor((Math.random() + "") * 1000000000000).toString();

    document.write('<iframe height="300"'
        + ' width="300"'
        + ' frameborder="0"'
        + ' scrolling="no"'
        + ' id="' + iframeId + '"'
        + ' name="' + iframeId + '"'
        + ' allowtransparency="true"></iframe>');

    var iframe = document.getElementById(iframeId);
    var iframeContent = '<!-- --\><script language=\"javascript\"\></script\>';
    iframe.contentWindow.document.open();

    iframe.contentWindow.document.write(
        '<!DOCTYPE html\><html\><head\><title\>Test</title\></head\><body\>'
        + iframeContent
        + '</body\></html\>');

    iframe.contentWindow.document.close();
</script>
</body>
</html>

このドキュメントをブラウザで開くと、iframe が正しく読み込まれません。これを引き起こしている可能性のあるものについて何か考えはありますか?

iFrameContent を次のように設定した場合

var iframeContent = '<!-- --\>';

また

var iframeContent = '<script language=\"javascript\"\></script\>';

ページが正しく読み込まれているようです。

iframeContent は、本質的にサード パーティの HTML スニペット (freemarker js_string を使用してエスケープ) であり、HTML コメントを含む場合があります。

4

2 に答える 2

0

問題は、スクリプト セクションが完了したことをブラウザーが認識する唯一の方法は、"" タグを探すことであり、その 1 つがスクリプトの途中にあることです。それはあなたのjavascriptの終わりであると考えているので、もちろんそれは構文エラーです。また、「」タグに気づき、スクリプトがネストされていると考える場合もあります。次のようなことを試すことができます:

var iframeContent = '<!-- --\><' + 
    'script language=\"javascript\"\></' + 'script\>';

そして、それが機能するかどうかを確認してください。

document.createElement や jQuery ライブラリなどを使用して DOM 要素を作成すると、さらに効果的です。

于 2012-05-11T20:45:26.057 に答える
0

コードは IE で動作しているようですが、他のブラウザでは動作していないようです。それを機能させるには、コメントの先頭にあるトークンをエスケープする必要があります。次に例を示します。

var iframeContent = '<!\-- --\><script language=\"javascript\"\></script\>';

</script\>コードではリテラルではないため、終了タグはここでは問題になりません</script>

于 2012-05-11T21:00:16.983 に答える