ホームページ > 記事 > ウェブフロントエンド > Web ページ_JavaScript スキルで document.write を使用すると奇妙な問題が発生する
数日前に Razor テンプレート エンジンを JavaScript に移植する調査を行った際、document.write を使用して出力されたコンテンツに外部 JavaScript を呼び出す <script> タグが含まれている場合、問題が発生する可能性があることがわかりました。ここでは、内部で呼び出される外部 JavaScript を示します。 IE および Opera の場合、これらの外部 JavaScript は、書き込みパラメータの他のすべての部分が解析されるまで実行されません。 <br><br>さらなる調査により、WebKit Web ページ レイアウト エンジンを使用する 2 つのブラウザである Chrome と Safari では、外部から呼び出された JavaScript が document.write を再度呼び出して別のドキュメントを書き込む場合、外部の <script> タグが存在することがわかりました。 JavaScript が呼び出され、2 回目に呼び出される外部 JavaScript は実行されず、その後の一部のコンテンツも中断されます。実際の状況は実際にはもう少し複雑で、2 番目と 3 番目のレベルとは異なります。 document.write 呼び出しのパラメータの特定の内容については、時間とエネルギーの制約により、より具体的なテストを行うことができません。 <br><br>これらの研究の結果、すべての document.write 呼び出しを正しく処理できる主要な主流ブラウザの中で生き残っているのは Firefox だけです。 <BR>Firefox の疑似「マルチスレッド」イベント処理機能は、私はずっと嫌いでした。今回の件は、「それぞれに独自の強みがある」ことの証明と言えます。 <br><br>この問題によって引き起こされるさまざまな現象を理解するには、write-test.zip をダウンロードして解凍し、その中にある write-test.htm をさまざまなブラウザで開くことができます。 <br><br>ここ数日間、私はこの問題を解決するための置換関数を作成しようとしてきましたが、上記のリンクのテストに成功しました。 <BR>今後数日以内に明らかな問題が見つからない場合は、皆さんの参考のためにブログに投稿します。 <BR><A href="http://xiazai.jb51.net/201008/yuanma/write-test.rar" target=_blank>テストコード、パッケージ化、ダウンロード</script>