0

基本的に、JavaScriptファイルを含む空白のHTMLページがあり、JavaScriptファイルには次のものがあります。

function doIt() {
 document.writeln("asdf");
}

// could also be setTimeout
setInterval("doIt()", 5000);

HTML ページが読み込まれると、5 秒間待機し、5 秒ごとに "asdf" が画面に出力されます。更新または f5 を押しても、何も起こりません。ソースを表示すると、ページは空白です。ソースを表示しても表示されない理由はありますか:

<script type="text/javascript" src="test.js"></script>

htmlページで?空白のソースのためにページを更新できないと仮定しています。これを解決する方法はありますか?

ありがとう!

4

4 に答える 4

1

document.writeページの読み込みが完了した後は、このように使用することはできません。

代わりに、DOM要素のテキストに追加する必要があります。

于 2010-10-28T12:16:04.427 に答える
1

HTML ページが読み込まれると、5 秒間待機し、5 秒ごとに "asdf" が画面に出力されます。

ページの読み込みが完了すると、ドキュメントは閉じられ、書き込みができなくなります。したがって、document.write()この時点以降に呼び出すと、 page を呼び出しdocument.open()完全に置き換えるつもりであると見なされます。古いドキュメントはアンロードされ、これから書き込もうとしている新しいドキュメントに置き換えられます。そのため、古いページのソースを表示することはできなくなります。

また、 を呼び出さないためdocument.close()、throbber は回転し続け、新しいドキュメントが完了するのを待ちます (これは決して起こりません)。

SLaks が言ったように、document.write()一般的に回避するのが最善の方法を使用する代わりに、DOM と対話する必要があります (初期ドキュメントをポップアップまたは iframe に書き込むいくつかの特定のケースを除きます)。

于 2010-10-28T12:28:58.587 に答える
0

みんなありがとう。ページが読み込まれた後に DOM を変更して javascript を追加する必要があることで、皆さんが何を意味するかを確認できました。私はそれを行うことができましたが、同じ問題に遭遇しました:

基本的に、setIntervalを使用して、データが親からこのiframeに送信されるのを待つためにポーリングを行う必要がありました。データを受信すると、javascriptが出力されます(DOMで新しいスクリプト要素を作成しました)。しかし、問題は、その要素の src が、そこからデータを取得する外部 URL を指していることです。外部ソースがデータを返す方法は、document.write を使用することです。これは制御できません。

setIntervalを使用する以外に、ポーリングを行うための他のオプションはありますか? 最大タイムアウトまでポーリングを続け、最大タイムアウトに達した場合はページの残りを実行したいので、外部ソースからの document.write の問題について心配する必要はありません。

外部ソースへの呼び出しを行い、応答を解析し、JavaScript で dom 要素を作成する別のオプションはありますか?

于 2010-10-28T13:32:14.667 に答える
0

単なるアイデアで、テストする機会がありませんでした。

スクリプトに空白のウィンドウを作成させ、そこにスクリプトを挿入して外部スクリプトを呼び出します。

var oWindow = window.open("about:blank", "dummy", "width=0,height=0");
oWindow.document.write("<html>");
oWindow.document.write("<body>");
oWindow.document.write("<" + "script" + " type=\"text/javascript\" src=\"external.js\"></" + "script>");
oWindow.document.write("</body>");
oWindow.document.write("</html>");
oWindow.document.close();

次に、oWindow.document.body.innerHTML を読んで、外部スクリプトの「出力」を確認します。

于 2010-10-28T13:55:11.833 に答える