1

正如标题所示,我试图在运行时逐页注入一个文档类型。

该应用程序使用带有大量内容页面的单个母版,因此我自然尝试在母版上插入控件,并在内容页面上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>

我有点困惑为什么这不起作用,因为替换应该发生在服务器端,然后输出被发送到浏览器,文档类型已经到位......

我为什么要这样做?

我这样做只是因为在 master 上指定一个 doctype 意味着我需要去修复大量的内容页面,然后才能开始处理分配的任务。如果我能找到一种通过某些内容页面注入 doctype 的方法,那么我可以一次有效地修复一个页面,直到它们完成。

这会影响哪些浏览器?

Internet Explorer 8是我们的主要目标。具有讽刺意味的是,浏览器实际上忽略了注入的文档类型。document.doctype在加载 DOM 后在运行时检查时,它返回null.

Firefox的行为不同。这种技术实际上适用于 Firefox,但对 [我] 并没有真正的帮助,因为我们所有的用户都被 Internet Explorer 8 卡住了。

4

3 回答 3

1

IE中是否打开了兼容模式?即浏览器是否在 URL 栏的右侧显示“锯齿状页面”图标?我们在某些用户的某些 Intranet 站点上默认激活此功能时遇到了一些问题。我相信我们必须确保 Intranet 站点在其本地 IE 安全设​​置中受到信任。

于 2012-07-27T18:12:53.217 回答
1

您可以尝试在内容页面上以编程方式更改 DOCTYPE。我已经对此进行了测试,甚至可以在 Internet Explorer 上使用。

首先删除 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 回答
0

事实证明,在文档类型被渲染的地方有一条评论。Internet Explorer 8 不喜欢这样。删除后,浏览器会以标准模式呈现页面。

于 2012-07-27T22:03:30.777 回答