ドキュメントにコンテンツを追加するにはdocument.write()
、<script> ブロックの解析段階でのみ呼び出す必要があります。
イベントハンドラーなど、そのコンテキスト外で実行される場所への呼び出しがある場合document.write
、解析は行われないため、その文字列はどこにも'foo'
行きません。
元の JavaScript リファレンスによると、次のようになります。
イベント ハンドラーは元のドキュメントが閉じられた後に実行されるため、イベント ハンドラーで document.open メソッドを明示的に発行しない場合、write メソッドは暗黙的に mimeType text/html の新しいドキュメントを開きます。
つまり、あなたが間違いを犯し、次のことを行うつもりであると想定しています。
document.open('text/html');
document.write(html);
これにより、ドキュメント全体が新しいコンテンツに置き換えられます。次の呼び出しでそれを終了しなかったため、次のことにも気付くでしょう。
document.close();
...Firefox では、「読み込み中」のスロバーはまだアニメーション化されており、ドキュメントにさらにコンテンツが書き込まれることを期待しています (しかし、決して来ません)。
この場合、document.write()
文字列を ing しています:
Hello bobince! How are you today?
これは明らかに有効な HTML ドキュメントではありません。Chrome (および同じように動作する Safari) は、それを HTML ドキュメントとして解析しようとしますが、許可されていないドキュメント要素 (<html>) の外側にある空白以外のテキスト コンテンツであるため、失敗します。名前の入力にいくつかのタグを入れると、次のようになります。
Hello <em>bobince</em>! How are you today?
<em> 要素の外側にあるものはすべて破棄されます。Firefox と IE は、「要素外のテキストを修正する」壊れた HTML ルールを適用してユーザーを救おうとしていますが、Chrome はそうではありません。
新しいドキュメントが必要な場合document.write()
は、それが完全なドキュメントであることを確認する必要があります。
<html><head><title>Greetings</title><body><p>Hello bobince! How are you today?</p></body></html>
または、document.write()
テキスト文字列が必要な場合は、理論的には次のように呼び出す必要があります。
document.open('text/plain');
write() の前に。ただし、mimetype パラメータは Chrome や Safari ではサポートされていないことに注意してください。彼らはあなたが書いたものを常に HTML として扱います。
いずれにせよ、おそらくこのメソッドを使用したくないでしょう。既存のページに追加 (または変更) する場合は、通常、ステータス出力 div にテキストを設定するか、innerHTML を使用して本文コンテンツを置き換えるなど、DOM メソッドを使用する必要があります。
document.write()
いくつかの場所で必要になりますが (特に、新しいウィンドウまたはフレームを最初から作成する場合)、それ以外の場合は一般的に間違っているため、疑いを持って表示する必要があります。