1

タイトルが示すように、実行時にページごとにDoctypeを挿入しようとしています。

このアプリケーションは、膨大な数のコンテンツページを持つ単一のマスターを使用するため、当然asp:contentplaceholder、マスターにコントロールを挿入asp:contentし、コンテンツページにコントロールを使用してみました。これは、ソースを表示するとdoctype要素が表示されるという点で機能しますが、ブラウザ(IE8)がなんらかの理由でQuirksモードで実行されているという点では機能しません。

マスターのプレースホルダーは次のとおりです。

<asp:contentplaceholder id="doctype" runat="server" />

このページのコンテンツパネルは次のとおりです。

<asp:content contentplaceholderid="doctype" runat="server" >
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
</asp:content>

置換はサーバー側で行われる必要があるため、これが機能しない理由については少し戸惑っています。その後、出力はdoctypeが既に配置された状態でブラウザーに送信されます...

なぜ私はこれをしているのですか?

マスターでDoctypeを指定すると、割り当てられたタスクの作業を開始する前に、膨大な数のコンテンツページに移動して修正する必要があるため、これを行っているだけです。特定のコンテンツページを介してDoctypeを挿入する方法を理解できれば、完成するまで一度に1ページずつ効果的に修正できます。

これはどのブラウザに影響しますか?

InternetExplorer8が私たちの主なターゲットです。皮肉なことに、挿入されたDoctypeを効果的に無視しているのはブラウザです。document.doctypeDOMがロードされた後、実行時にチェックすると、が返されnullます。

Firefoxの動作は異なります。この手法は実際にはFirefoxで機能しますが、すべてのユーザーがInternet Explorer 8で立ち往生しているため、実際には役に立ちません。

4

3 に答える 3

1

コンテンツページでプログラムによってDOCTYPEを変更してみることができます。私はこれをテストし、InternetExplorerでも動作します。

最初にMasterPageページソースのDOCTYPEを削除してから、コンテンツページで次のコードを試してください。

Imports System.IO

Public Class WebForm2
    Inherits System.Web.UI.Page

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)    

        Dim sb As New StringBuilder("<!DOCTYPE HTMLP>") 
        Dim textWriter As New HtmlTextWriter(New StringWriter(sb))
        MyBase.Render(textWriter)
        writer.Write(sb.ToString())

    End Sub

End Class
于 2012-07-27T18:28:45.047 に答える
1

IEで互換モードがオンになっていますか?つまり、ブラウザはURLバーの右側に「ギザギザのページ」アイコンを表示しますか?一部のユーザーの一部のイントラネットサイトでは、これがデフォルトでアクティブ化されるという問題がありました。イントラネットサイトがローカルIEのセキュリティ設定で信頼されていることを確認する必要があったと思います。

于 2012-07-27T18:12:53.217 に答える
0

結局のところ、Doctypeがレンダリングされていた場所の上にコメントがありました。InternetExplorer8はこれが気に入らなかった。削除されると、ブラウザはページを標準モードでレンダリングします。

于 2012-07-27T22:03:30.777 に答える