DOCTYPEの選択は、JavaScriptコードから見たDOMに影響しますか?
-
05-07-2019 - |
質問
ASP.NET、javascript、cssなどのテクノロジーを利用した大規模なレガシープロジェクトを考えて、WebページのDOCTYPEを、たとえばHTML 4.0 TransitionalからXHTML 1.0 Transitional(またはその逆)に変更するかどうか疑問に思いましたいずれにせよ、ウェブページのJavaScript機能を破壊する可能性があります。
さまざまなDOCTYPESがページの(css)レンダリングにどのように影響するかについての記事と議論はたくさんありますが、コードを壊すというテーマで似たようなものは見つかりません。
既存のコードの潜在的な問題を特定し、新しいコードを記述するときに問題が発生するのを防ぐために、一般的に注意すべき事項に関する記事へのリンクを探しています。
解決
DOCTYPEを変更してもJavaScript関数が破損するかどうかは、それらの関数がどのように設計されているかによります:)
たとえば、ドキュメントが quirksモードでレンダリングされると、 document.body
(BODY)はいわゆる「ルート要素」になります。標準モードでレンダリングされる場合、そのルート要素は通常 document.documentElement
(HTML)です。これはかなり重要な違いです。ブラウザの画面サイズを決定するスクリプトが常に document.documentElement
の clientWidth
/ clientHeight
プロパティを照会すると、quirksモードで誤った結果が明らかに報告されます(IIRC、 document.documentElement.clientWidth / clientHeight
は、画面の要素ではなく、HTML要素の次元を表すため。)
通常、ほとんどのJSライブラリは、quirksmodeがサポートされているかどうかを明示的に示します(Prototype.js-たとえば、quirksモードをサポートしていません)。
HTML vs XHTML と言えば、ブラウザがドキュメントをXHTMLとしてレンダリングするには、まず適切な「コンテンツタイプ」でドキュメントを提供する必要があります。ヘッダー(つまり、application / xhtml + xml)。 doctypeをXHTMLに変更するだけで、ドキュメントを" text / html"として提供する場合、私が知っているほとんどのブラウザーは HTMLドキュメントとして解析(およびレンダリング)します。
これまでのところ、IEは" real"を理解していないことに注意してください。 XHTMLコンテンツ。これが、ドキュメントをtext / html(doctype HTML4.01)として提供することが推奨される方法である理由です(もちろん、IEがサポートされているブラウザーにない場合を除きます)。
「実際の」DOMの特性に関する限り、 XHTMLドキュメントでは、 document.write
" do n't work"のようなものがあると聞きました。また、ノード属性へのアクセスは、常に(より単純なプロパティアクセサーではなく) getAttribute / setAttribute
を介して実行する必要があります。 IIRC、 innerHTML
にも問題があります。
「実際の」DOMに関する情報の不足XHTMLドキュメントはおそらく、一般的なWebのドキュメント/アプリケーションの非実用性によるものです(つまり、IEのサポートの欠如)。
他のヒント
DTDを使用している場合:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
その場合、サイトはIEではquirksモードになり、最新のブラウザーではほぼ標準モードになります。xhtml1.0の移行dtdによりページが強制的に標準モードになるため、Javascriptでレイアウトの問題と潜在的な問題が発生します(特にIE)DOMが奇抜と標準でレンダリングされる方法にはいくつかの大きな違いがあるため。
ただし、HTML 4.01 DTDにシステム識別子が含まれる場合:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
すでに標準モードになっているはずです。サイトで「document.compatMode」をクエリすることで確認できます。標準の場合は「CSS1Compat」、そうでない場合は「BackCompat」と表示されます。
XHTML 1.0 Transitionalでtext / htmlのContent-Typeを提供することを想定しています。