WebSurfer's Home

トップ > Blog 1   |   Login
Filter by APML

ImageButton と W3C 検証

by WebSurfer 28. July 2010 14:43

ASP.NET の ImageButton コントロールを配置したページを W3C Markup Validation Service で検証すると、「あなたが使用しているドキュメントタイプではサポートされていない属性(border="0")が使われている」というエラーが出ます。

W3C 検証画面

ドキュメントタイプは ASP.NET のデフォルトで、XHTML 1.0 Transitional と宣言しています。border 属性の使用は、Strict ではダメですが、Transitional では許されているはずなんですが・・・

それはともかく、オリジナルの *.aspx コードにはそのような属性を指定していないにも関わらず、何故 ASP.NET が border="0" という古い属性のコードを書き出すのでしょう?

それは、W3C Markup Validation Service から ASP.NET が要求を受けた際、要求元を古いブラウザと解釈するからだそうです。

ちなみに、IE8 や Firefox 3.6.7 などの新しいブラウザから同じページを要求すると、style="border-width:0px;" となって、XHTML1.0 Strict でも有効な HTML/CSS のコードになります。

この件は ASP.NET Forum にもレポートされていて、回避策も書かれています。リンク切れになると困るのでここにもその回避策を書いておきます。(2011/8/20追記: MSDN ライブラリ にも対応方法が書いてありました。下の追記参照)

アプリケーション・ルート直下に App_Browsers フォルダを設け、その中に以下の内容の .browser ファイルを配置します。これによって ASP.NET は W3C Markup Validation Service に対して IE8 や Firefox 3.6.7 と同じコードを送信するようになるはずです。

<browsers>
  <browser id="w3cValidator" parentID="default">
    <identification>
      <userAgent match="^W3C_Validator" />
    </identification>

    <capture>
      <userAgent match="^W3C_Validator/(?'version'(?'major'\d+)(?'minor'\.\d+)\w*).*" />
    </capture>

    <capabilities>
      <capability name="browser" value="w3cValidator" />
      <capability name="majorversion" value="${major}" />
      <capability name="minorversion" value="${minor}" />
      <capability name="version" value="${version}" />
      <capability name="w3cdomversion" value="1.0" />
      <capability name="xml" value="true" />
      <capability name="tagWriter" value="System.Web.UI.HtmlTextWriter" />
    </capabilities>
  </browser>
</browsers>

なお、上記は ASP.NET 3.5 の話で、ASP.NET 4.0 でどうなっているかは未確認です。


------ 2011/8/20 追記 ------

MSDN ライブラリの Visual Studio と ASP.NET の XHTML 標準 の「マークアップ検証に対するブラウザー機能の構成」というセクションに、本件に関する記述がありました。

.NET Framework 4 の記事なので、サーバを ASP.NET 4 にアップグレードしても、ブラウザー定義を追加しての対応は必要なようです。

なお、そこで紹介されている W3C 検証用のブラウザ定義は以下の通りです。

<browsers>
  <browser id="W3C_Validator" parentID="default">
    <identification>
      <userAgent match="^W3C_Validator" />
    </identification>
    <capabilities>
      <capability name="browser" value="W3C Validator" />
      <capability name="ecmaScriptVersion" value="1.2" />
      <capability name="javascript" value="true" />
      <capability name="supportsCss" value="true" />
      <capability name="tables" value="true" />
      <capability name="tagWriter" 
         value="System.Web.UI.HtmlTextWriter" />
      <capability name="w3cdomversion" value="1.0" />
    </capabilities>
  </browser>
</browsers>

W3C のホームページの User's guide for the W3C Markup Validator によると、通常の User-Agent は W3C_Validator/xx.xxxx とのことなので、MSDN ライブラリのブラウザ定義の方が適切だと思います。

Tags: ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  June 2021  >>
MoTuWeThFrSaSu
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar