Adr*_*ore 7 html xhtml doctype opera
我刚试过在Opera(版本10.50)中查看我的网站http://www.logmytime.de/它给了我一个"xml解析失败错误"并拒绝显示网页.
我可以选择"将文档重新解析为HTML",然后页面工作正常,但这不是我的问题的解决方案.
奇怪的是,在设置HTML(而不是XTHML)doctype后仍然会出现错误:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
Run Code Online (Sandbox Code Playgroud)
我检查了浏览器的源输出,以确保我没有在Doctype中犯任何错误我甚至在Firebug中查看了同一个网页,它显示了一个Content-Type of text/html; .
那么,为什么Opera仍然试图将我的网页解析为XML?
谢谢,
阿德里安
编辑:只是为了澄清:我不是在问我网页上的错误是什么.我理解为什么这不是有效的XHTML.但是,我也在使用javascript微模板引擎,它的模板永远不是有效的XML,这就是为什么我需要浏览器将我的整个网站解析为HTML,而不是XHTML.为了证明这一点,我刚刚在网页中插入了一个示例模板.
<script type="text/html" id="StopWatchTemplate" >
<h1><a href="#" onclick="TimeEntriesList.EditTimeEntry('<#=timeEntryID#>')"><#=currentlyRunning?"Aktueller":"Letzter"#> Stoppuhr-Zeiteintrag</a></h1>
<%-- Stoppuhr - Ende--%>
</script>
Run Code Online (Sandbox Code Playgroud)
在Opera中打开页面时,您可以看到模板现在产生XML解析错误,即使页面的doctype仍然是HTML.
编辑2 ::只是为了让这更清楚:我不是在问为什么我的网页无效XHTML.我问为什么Opera尽管HTML文档类型试图将其解析为XHTML.
EDIT3: :请不要发布任何更多的答案,我发现这种情况的原因,并记录在它下面.
Jör*_*tag 13
您的文档不是有效的HTML文档.所以,浏览器应该拒绝它.不幸的是,由于历史性的意外,大多数浏览器不会拒绝无效文档,而是尝试修复它们(通常结果非常糟糕),以便authro甚至不会注意到他的文档被破坏了.
值得庆幸的是,使用XHTML,浏览器供应商决定解决这个问题,并且实际上拒绝了无效文档.在您的情况下,您将使用application/xhtml+xmlMIME类型将文档作为XHTML传递:
# curl --head http://www.logmytime.de/ HTTP/1.1 200 OK Cache-Control: private Content-Length: 12529 Content-Type: application/xhtml+xml; charset=utf-8 ^^^^^^^^^^^^^^^^^^^^^ Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 2.0 X-AspNet-Version: 2.0.50727 Set-Cookie: Referrer=None; path=/ X-Powered-By: ASP.NET Date: Tue, 04 May 2010 16:08:40 GMT因此,浏览器拒绝您的文档(应该如此).切换到HTML时,它会尝试修复损坏的HTML.
现在,您已将您更改DOCTYPE为HTML 4.01,但您仍然将其作为XHTML提供.你现在已经做到的就是,有2个理由浏览器拒绝您的文档:它仍然是无效的,因为你没有固定的实际缺陷和在DOCTYPE和MIME类型不匹配.
解决此问题DOCTYPE的正确方法是简单地修复无效标记并删除第class172行上无关的属性,而不是使用s和MIME类型进行混淆以使浏览器解析损坏的文档.[BTW:谁写的那份文件?缩进和格式很糟糕.]
小智 7
您有两次指定的"class"属性.
alt text http://img504.imageshack.us/img504/9243/logmytime.png
属性名称不得在同一个start-tag或empty-element标记中出现多次.
你得到了正确的答案(HTTP内容类型标题强制XML解析),它似乎是固定的.我只想添加一个小小的提示,告诉你如何从Opera本身中找出错误.两种可能的方式:
1)信息面板
这在默认情况下不可见,但是如果您打开左侧的面板栏(如果您没有看到,请按F4切换),然后单击底部的小加号,您可以在菜单中启用"信息" .
信息面板显示有关当前打开的页面的各种信息,包括编码和MIME类型.
2)Opera Dragonfly
按Ctrl-Shift-I打开开发人员工具(或通过菜单进入工具>高级> Opera Dragonfly)
转到"网络"选项卡,然后重新加载网站.您将看到该请求并可以查看标题.将其与Firebug中的相应信息进行比较,可以向您展示Content-type标头的不同之处.(在这里,你还会看到歌剧发送"接受"报头包含"应用程序/ xhtml + xml".这意味着"嗨服务器,如果你碰巧有真正的XHTML格式的文件我也明白就好了."也许您的服务器端框架看到该标头并错误地响应XHTML内容类型,即使内容无效?)