IE8 Beta 1 における HTML 標準および DOM 標準準拠
更新日: 2008 年 4 月 10 日
本記事は、Internet Explorer 開発チーム ブログ (英語) の翻訳記事です。本記事に含まれる情報は、Internet Explorer 開発チームブログ (英語) が作成された時点の内容であり、製品の仕様や動作内容を保証するものではありません。本記事に含まれる情報の利用については、使用条件をご参照ください。また、本記事掲載時点で、Internet Explorer 開発チーム ブログ (英語) の内容が変更されている場合があります。最新情報については、Internet Explorer 開発チームブログ (英語) をご参照ください。
翻訳元 : HTML and DOM Standards Compliance in IE8 Beta 1 (英語)
IE8 Beta 1 のリリースを受けて、新しい IE8 標準モード (英語) のHTML およびDOM のサポートによる標準準拠の改善とバグ修正の第1 段階についてお話しできるようになりました。改善点の一部については Doug Stamper が触れていますが、私も少し IE8 Beta 1 のホワイトペーパー (こちら (英語) およびこちら (英語)) に書いています。ここでのブログの記事では、 MIX08 に寄せられた、一種の " 変更リスト " に対するご要望にお答えし、その変更点をリストとして列挙します。私は個人的にこのリリースを長いこと待ち望んでいました。なぜなら、 IE の DOM 後方互換に対応するコーディングに長年携わってきた Web 開発者 ( 私自身もその一人ですが ) にとって、大きな価値があると思うからです。
IE8 では、HTML と DOM のコア標準を中心に取り組み、多くのAPI ( Trident ではサポート済みです) について確固としたクロスブラウザ互換の基礎を構築することに専念してきました。 IE のベース部分で生じたいくつかの不具合を修正する取り組みに長い時間がかかりましたが、これは新たな標準サポートに取りかかる前の、重要で、かつ必要な最初の第一歩だと信じています。
IE8 Beta 1 では、多くのコミュニティから寄せられたバグ報告に注目しました。その結果、主な弱点は IE の属性処理に関連することだとわかりました ( ただし、 getElementById のようによく知られた例外もあります ) 。そのため、属性処理が、 IE8 で取り組む複数の問題の " テーマ " になっています。報告数が多いのため、 DOM に関してコミュニティから報告されたバグのすべてをこのリリースで修正することは難しいのですが、悪質なバグには確実に対処していきたいと考えています。ぜひとも、業務に最も影響があると思われるバグについて、今後も送信または投票 (英語) してください。
IE8 Beta 1 の HTML/DOM 標準準拠
注 : DOM 属性/コンテンツ属性については HTML5 の用語 (英語) を使用しています。
属性関係の修正の範囲では、IE の HTML および DOM サポートに関してよく知られていて、引用されることが多い準拠問題の一部について、以下のように対処しています。
- IE8 標準モードでは、<BUTTON> タイプ属性の既定値は "submit" となります。 "button" ではありません。
- setAttribute では、属性値の適用時に、DOM 属性名ではなくコンテンツ属性名が使用されるようになりました。また、 camelCase は不要になりました。
・ この改善により、"style" 、"class" 、および "for" 属性が機能しないと報告されている多くの問題が修正されます。
- getElementById では、id が一致する要素のみが検索され (name ではありません) 、大文字と小文字を区別するマッチングが実行されます。
- IE8 標準モードでは、<BUTTON> の値属性テキストはフォームのsubmit で送信されるようになりました。 IE7 標準モードでは、引き続き innerText が送信されます。
- <OBJECT> では、ネイティブ画像読み込みがサポートされるようになりました( 詳細についてはホワイトペーパー (英語) を参照してください) 。
- <OBJECT> では、HTML 埋め込みとネイティブ画像読み込み (HTML/ 画像のリソースを読み込むことができない、つまり4xx-5xx HTTP 応答コード) という、2 つの新しいシナリオに関する代替処理がサポートされるようになりました。 ActiveX については、代替処理はまだサポートされていません ( 詳細についてはホワイトペーパー (英語) を参照してください ) 。
- URLタイプのDOM属性は、コンテンツ属性と区別されるようになりました。例 : <A>.href (DOM 属性) != <A>.getAttribute('href') ( コンテンツ属性)URL タイプの DOM 属性は常に絶対 URL を返し、コンテンツ属性はソースに指定された文字列を返します。これらの変更は、 Attr.value と getAttributeNode にも適用されます。具体的に説明します。
・ 絶対 URL を返すようになった DOM属性を持つ要素は、applet [codebase] 、base [href] 、body [background] 、del [cite] 、form [action] 、frame [src, longdesc] 、head [profile] 、iframe [src, longdesc] 、img [longdesc] 、ins [cite] 、link [href] 、object [codebase, data] 、q [cite] 、script [src] です。
・ 相対 URL を返すようになったコンテンツ属性を持つ要素は、a [href] 、area [href] 、img [src] 、input [src] です。
IE の属性処理に関して報告された多くの問題( および報告されなかったいくつかの問題) には、NamedNodeMap インターフェイス オブジェクト ( オブジェクト属性) 、コンテンツ属性を反映した正しい DOM 属性、および大文字と小文字の区別が関係しています。原則的に、標準の規定 (英語) では HTML ドキュメントは大文字と小文字を区別しないこととしていますが、 DOM コア関連の API は大文字と小文字を区別しています。基礎となるドキュメントの規則に応じて、区別するかどうかが決定されるのです。このあいまいさを解決するために、他のブラウザで最も一般的な動作に従いました。
- <element>.attributes.getNamedItem では、コレクションに存在しない Attr オブジェクトが作成されなくなりました( 属性が見つからない場合、null を返します) 。
- ラジオボタンの修正:
・ ラジオ ボタンの "name" 属性を動的に設定すると、同じ名前のグループに正しく適用されるようになりました( 後方互換、IE7 、および IE8 標準モードで修正された既知の問題) 。
・ IE8 標準モードでは、ユーザーは name 属性がないラジオ ボタンを選択できるようになりました( 興味深いことに、コードを見て、かつてのNetscape 互換問題であることがわかりました) 。
- <FORM> enctype DOM 属性がサポートされました。enctype コンテンツ属性が反映されます。
- チェックボックスの修正:
・ チェックボックスをツリーに挿入しても( またドキュメント内を移動しても) 、"checked" 状態が "defaultChecked" 状態にリセットされなくなりました。
・ "defaultChecked" DOM 属性は、"checked" コンテンツ属性を反映するようになりました。 "checked" DOM 属性は、画面上で行った操作と、フォームの送信値の両方に影響があります。
・ "checked" コンテンツ属性に関する解析操作は、常に"checked" および "defaultChecked" DOM 属性に影響を与えます。 ( たとえば、removeAttribute('checked') にすると、"checked" と "defaultChecked" は false に設定され、setAttribute('checked', 'checked') に設定すると、両方の DOM 属性が true に設定されます。 ( 要素が再解析された場合と同様です ) 。
- getAttributeNode で、(.specified=true かどうかに関係なく) すべての属性について、返される Attr オブジェクトの .value プロパティが正しく設定されるようになりました。
- removeAttribute では、大文字と小文字を区別しない比較を使用するようになりました。
- <P> 要素は <TABLE> の前で終了するようになりました (ACID 2 準拠) 。
- <LINK> rel コンテンツ属性では、文字列の任意の場所にある" 代替" トークンを検索するようになりました(ACID 2 準拠) 。
- 指定された URL が相対 URL の場合、<BASE> href は " 新しい" ドキュメント ベースを適用しなくなりました ( 相対 URL は、スキーマ ["http:"] も、ホスト名 ["/" または " ドメイン"] もない URL と定義されます) 。
- 画像とマップ (img 、input 、object 、および area の各要素) にポップアップのツール ヒントとして Title 属性を指定した場合、その Title が (alt よりも) 優先されるようになりました。
- 名前でブール型属性を取得した場合に、そのvalue が標準の属性名 ( たとえば、checked='checked') として正しく報告されるようになりました。
- hasAttribute ( 大文字と小文字を区別しないマッチング) が実装されました。これは、 NamedNodeMap の構築中に提案された回避方法です。
- ownerElement を実装して (DOM L2 コアの) Attr インターフェイスを完成しました。
- contentDocument を実装して、object 、iframe 、および frame (DOM L2 HTML) のインターフェイスを完成しました。注 : contentWindow と同様に、このプロパティは、インナー コンテンツへのクロスドメイン アクセスを許可していません。
- HTMLコレクションの修正:
・ 文字列を受け入れ、"namedItem" のように動作するための負荷が "item" API にかからなくなりました。 "item" は数値のインデックスのみを受け入れるようになりました ( または JavaScript の動作どおりに文字列から数値のインデックスへの変換が試行されます ) 。
・ 複数の名前のアイテムが見つかった場合、"namedItem" はコレクションを返さなくなりました。代わりに、最初の一致した要素 ( 大文字と小文字は区別されません ) が返されます。
・ IE8 は HTML コレクション インターフェイスを使用せずにコレクションの実装を行うこともあるため、現在のところ、elements [HTMLFormElement] 、rows/tbodies [HTMLTableElement] 、rows [HTMLTableSectionElement] 、および cells [HTMLTableRowElement] という例外があります。
既知の問題
IE8 Beta 1 には JavaScript の呼び出しコードに関する重要なバグがあります。これは、一部の JavaScript の呼び出し時に誤って IE7 互換モードに戻ってしまい、結果として前述したバグの一部が修正されていないように見える、という問題です。この問題は、 HTMLCollections のような DOM オブジェクトをテスト用の関数パラメータに通すという、私が行っていたテストの一部に影響がありました ( 一例として説明します ) 。このバグは Beta 2 で修正される予定ですが、皆さんが行うテストに間接的に影響を及ぼす可能性があります。 IE8 Beta 1 が特定のバグを修正していないと結論付ける前に、 document.querySelector の存在を確認して、スクリプトの実行が IE7 互換モードに戻っているかどうかを判断することをお勧めします ( これは、 Selectors API を表示できるのは IE8 標準モードのみであるためです ) 。
少なくとも、DOM で以前に使用できた全機能を Beta 2 で復元する予定です。
- setAttribute とイベント ハンドラは、まだ連携していません。
- <element>.attributes.length は失敗します。IE8 NamedNodeMap オブジェクトは修正中です。
- 多くの TABLE 関連の API は Beta 1 の API として " 実装されていません" 。 IE8 レイアウト エンジンの重要な部分はオンラインになったため、次の API が再び有効になります。
・ rows/tbodies [HTMLTableElement]、rows [HTMLTableSectionElement] 、cells [HTMLTableRowElement] 。
- <OBJECT> 要素は、クロスドメインのセキュリティエラーに依存しません (英語)。
- <OBJECT> はクロスブラウザ互換の方法では解析されません( 解析は OBJECT で停止します。一方、他のブラウザでは、すべての代替コンテンツの解析を続行し、使用できるようにします ) 。 IE8 では、この解析動作のサポートは行わない予定です。この機会を利用して、この解析機能を優先する可能性がある実社会のシナリオについてご意見をいただく予定です。
- 元の代替処理を発生させるように属性を動的に修正して、<OBJECT> 要素を " 再アクティブ化" することはできません。繰り返しになりますが、この機能の長所や使用例について皆様からのフィードバックをお待ちしています。
謝辞
IE の開発者とテスタのみなさん全員に対して、ここに記載した重要な変更のそれぞれについてボタンを押し 、IE7 互換の動作 確認?保証? を実現した素晴らしい努力に感謝いたします。
また、完了した作業の一部を示す互換表 (英語) を更新してくださった PPK さんには特に感謝いたします。
今後の記事も楽しみにしてください。
ありがとうございました。
Travis Leithead
プログラム マネージャ
IE8 オブジェクト モデル
2008 年 4 月 10 日木曜日発行 (ieblog (英語) 上)
タグ : General IE Information (英語)、Developers (英語)
ページのトップへ