非推奨になることについて少しおしゃべりをしましたdocument.write
が、この情報がどこから来たのか正確にはわかりません。MDNで調べましたが、非推奨になるという表記はありませんでした。そのため、今は少し疑わしいです。残念ながら、Googleもあまり役に立ちませんでした(おそらく私は正しい検索用語を使用していなかっただけです)。
それが実際に非推奨になっている場合、誰かが私を適切なドキュメントにリンクして、それが実際に非推奨になっていることを示すことができますか?
非推奨になることについて少しおしゃべりをしましたdocument.write
が、この情報がどこから来たのか正確にはわかりません。MDNで調べましたが、非推奨になるという表記はありませんでした。そのため、今は少し疑わしいです。残念ながら、Googleもあまり役に立ちませんでした(おそらく私は正しい検索用語を使用していなかっただけです)。
それが実際に非推奨になっている場合、誰かが私を適切なドキュメントにリンクして、それが実際に非推奨になっていることを示すことができますか?
いいえ。ほとんどの場合、これは悪い習慣と見なされ、ほとんど誤用されていeval
ます。
読む:document.writeが「悪い習慣」と見なされるのはなぜですか?
上記のリンクされた質問からいくつかの重要なポイントを引用します:
document.write
(以降、DW)はXHTMLでは機能しませんページの読み込みが完了した後に実行されたDWは、ページを上書きするか、新しいページを書き込むか、または機能しません
DWは、検出された場所で実行されます。特定のノードポイントに注入できません。
また、@ JaredFarrishが述べたように、deprecated
ほとんどは心の状態です。これは、ほとんどの場合、消えることはないという遺物です。そうしないと、多くのサイトが壊れてしまいます。従来のGoogleAnalyticsコードでさえDWを使用しています。
明らかに、機能面では、適切なDOM操作メソッドに取って代わられ、上記のリンクされた質問を再度引用していますDW is effectively writing serialised text which is not the way the DOM works conceptually
。
相殺するために、DWが適切であると考えられる場所のリストを次に示します。
CDNからのjQueryのロードが失敗した場合など、外部スクリプトをローカルコピーに簡単にフォールバックできます。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.8.2.min.js">\x3C/script>');</script>
これは、コードを短くして(分析など)、ページに外部スニペットを挿入する最も簡単な方法の1つです。Google Analyticsなどのシステムは、従来の方法を使用するのではなく、非同期の方法(APIscript
を介して要素を作成し、そのプロパティを設定してDOMに追加する)を優先することに注意してください。document.createElement
document.write
tl; dr:
DWは簡単に誤用されるため、実際に使用する場合は、実行可能な場合は常に適切なDOM操作方法を使用してください。
document.write
大丈夫ですか?プログラマーが避けるように勧められている場所はたくさんあります( HTML5仕様document.write
でさえも平手打ちは難しいです)。これは、標準化されていない、またはWebスクリプトの最初の段階で導入されたかなり不格好なものの1つであるためです。指定されていても、他の方法に取って代わられています。
ただし、それが役立つと見なされる場合が少なくとも1つあります。
多くのWebページには数百kbのスクリプトがあります。これは主に、開発者がページサイズに関係なくライブラリとプラグインをドロップするためです。これは、開発時間を数時間節約し、開発者はクライアントや雇用主の訪問者よりも時間を重要視しているためです。
スクリプトが無効になっているか利用できない場合、ブラウザは通常スクリプトをダウンロードしませんが、一部のブラウザはダウンロードする可能性があります。スクリプトを使用してスクリプトを挿入すると、スクリプトが使用できない場合、スクリプト要素がドキュメントに配置されたり、関連するリソースがダウンロードされたりすることはありません。
document.write
スクリプトローダーを実装する非常に簡単な方法です。確かに、同じことを行うためのはるかに洗練されたスクリプトローダーがありますが、古き良きものdocument.write
は基本的ではなく、どこでも機能し、この目的のために、innerHTMLと同じくらい簡単に仕事をします。
また、innerHTML(およびDOMメソッドを使用して要素を作成する方法としてのマークアップスニペット)が広く使用されていることを考えると、スクリプトを挿入するために同様のツールを使用することは合理的と思われます。
これは上記のものとほとんど同じですが、少し異なります。
innerHTMLを使用して挿入されたスクリプト要素は実行されないため、ドキュメントストリームが開いている場合はdocument.write
、innerHTMLの代わりに使用するのは非常に簡単です。ただし、通常の注意事項が適用されますがdocument.write
、ドキュメントがロードされた後に使用すると、最初に現在のドキュメントが削除されます。これは、常に(エラー、ほとんどの場合)望ましいとは限りません。
さて、誰もがポップアップを嫌い、それらを組み合わせるdocument.write
のは最悪の最悪の最悪のようです。ただし、作成されたコンテンツを含む単純なポップアップdocument.write
は、より洗練されたダイアログよりも単純で高速(開発と提示の両方)である場合があります。
document.write
HTML以外のドキュメント(XMLなど)では機能しません。しかし、Web上の多くのページにはXHTML DOCTYPEがありますが(おそらくCMSはHTMLよりもXMLを好むため)、ページはほとんどの場合テキスト/ HTMLとして提供されるため、ブラウザーはそれらを処理します。WebがすぐにXML(つまり、実際にXMLとして提供されるドキュメント)に移行する可能性はほとんどありません。Webページの場合、DOCTYPEは基本的に、ブラウザーが標準モードにする必要があるかどうかを判断するために使用するフラグであるため、XMLのことは少し厄介です。
ただし、document.write
DOMメソッドは標準化された代替手段を提供し、適切に指定された動作を持ち、ほぼ普遍的にサポートされているため、「現実の世界」で使用することはほとんどありません。document.write
は、それが役立ついくつかのまれなケースがあるという点で多かれ少なかれ同等eval
ですが、ほとんどの場合、物事を行うためのより良い方法があります。
W3CHTML5仕様[W3C勧告2014年10月28日セクション6.3.3]には、document.write()がまだ存在しますが、https: //www.w3.org/TR/html5/webappapis.html#document.write()が存在します。仕様のかなり明示的な警告で、末尾が... 「これらすべての理由から、このメソッドの使用は強くお勧めしません。」