2011-06-30 19 views
2

document.writeに問題があります。今、スクリプトを動的に読み込むページがあります。したがって、私はdocument.createElementを使用して<script>を作成します。 javascriptファイルでは、document.writeを使用してdomまたはiframe要素を作成します。しかし、すべてのブラウザで動作するわけではありません。何故なの?Javascript:createElementスクリプトの "document.write"を実行できませんでした

コードホームページで:スクリプトで

var script = document.createElement('script'); 
script.setAttribute('src', 'http://yoururl/test.js'); 
document.getElementsByTagName('head')[0].appendChild(script); 

コードがtest.js:

(function(){document.write('hello');})(); 
+0

が何を意味する「動作しませ用量」のでしょうか?どのように失敗するのですか?それはあなたのコンピュータをクラッシュさせるか、何も書かれないか、何かが時間の50%を書かれるか、IE6で書かれますが、IE5.5のMacでは書かれませんか?いくつかの説明がここで非常に役立つでしょう。 – Domenic

+0

[document.write](http://www.w3。org/TR/html5/apis-in-html-documents.html#document.write)については、HTML5仕様書の草案で説明しています。ドキュメントの読み込みが終了した後は使用しないでください。また、即座に実行される関数式でラップする必要もありません(有害ではなく、無意味です)。 – RobG

答えて

4

ページの読み込みが終了した後に実行される任意のdocument.write文は、新しいページを作成して、すべてを上書きします現在のページの内容これはほぼ確実にあなたが起こそうとしていることではありません。

http://javascript.about.com/library/blwrite.htm

あなたは、DOM要素を作成し、このようにそれを行うと、文書(または要素)にそれを追加したい場合は、次の

var elem = document.createElement('iframe'); 
elem.src = "http://www.google.com"; 
document.getElementById('myContainer').appendChild(elem); 

https://developer.mozilla.org/en/DOM/document.createElement

+0

あなたの助けにThxが、私の質問はページの負荷の後に起こらない。 window.onloadの前に、document.writeは機能しません。しかし、同じことに感謝します。 – Zodiac

2

あなたは新しいを追加します頭ののスクリプト要素。 の内容の内容は表示されないので、document.write呼び出しが成功しても、テキストは表示されません。

あなたが表示されるコンテンツたい場合は、(子供や他の子孫として)身体に追加ので、本体にスクリプトを移動する必要があります:あなたはまだ持っている必要があります

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<title>Document.write test</title> 
<body> 
    <div> 
    <script type="text/javascript"> 
     var script = document.createElement('script'); 
     script.src = 'http://yoururl/test.js'; 
     document.getElementsByTagName('div')[0].appendChild(script); 
    </script> 
    </div> 
    ... 
</body> 

注意document.writeの後に有効な文書が完成しました。

上記のFirefox 5では動作しませんが、IE 6注意警告についてdocument.write HTML5仕様ででない:

この方法は非常に特異な振る舞いを持っています。場合によっては、パーサーが の実行中にHTMLパーザの状態に影響を与えることがあり、 のDOMには ドキュメントのソースに対応しないDOMが発生することがあります。他の場合、 の呼び出しは、あたかも document.open()が呼び出されたかのように、現在のページを最初にクリアすることができます。 さらに多くの場合、メソッドは単に が無視されるか、例外がスローされます。この方法の正確な動作 は、 がネットワーク待ち時間に依存することがあります。 は、デバッグが非常に難しいエラーにつながる可能性があります。 すべてのこれらの理由から、この方法の 使用が強く推奨されて 。**

関連する問題