2009-01-15 53 views
0

我正在使用使用自定义标记的发布系统。这些在服务器上解释。问题是,当他们在本地查看时,它们会导致Opera出现严重问题(自定义标记未被解释)。Opera中的非标准标记行为

Opera正在处理这些标签与其他浏览器不同。它看起来像是在文档的末尾关闭标签(即使标签包含结束斜线)。我只是想知道,如果这种行为被认为是错误或功能。另外,如果您有任何想法如何破解这些代码,以便我可以在本地调试HTML + CSS(没有解释的自定义标签),请让我知道。谢谢。

尝试如下因素代码,看看它在行动(live example):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Non-standard tag behavior in Opera</title> 

    <style type="text/css" media="all"> 
     div { background: yellow; padding: 1em; } 
     nonstandardtag { border: 1px solid red; } 
    </style> 

</head> 

<body> 

<div> 
    <nonstandardtag>content of non-standard tag</nonstandardtag> 
    main tag content 
</div> 

<div> 
    <nonstandardtag /> 
    main tag content 
</div> 

</body> 

</html> 

回答

1

这似乎是固定在Opera 10所以我想这是不是一个功能

2

我用歌剧超过5年。这是最接近标准的浏览器。大多数在Opera中看起来不好的网站都是针对IE进行“优化”的。

但一个明显的问题是,为什么你需要使用非标准标签?几乎所有非标准解决方案都可以使用div和span标签。

+0

同意非标准使用的问题 - 这应该通过最有可能的类名或ID来完成 – annakata 2009-01-15 10:59:05

+0

正如我在原始帖子中提到的:非标准标签是我使用的发布系统的一部分。它们是将服务器端转换为有效HTML代码块的占位符。把它们想象成包含。 – Fczbkk 2009-01-15 11:07:39

0

一,你不需要非标准的元素。二,不管你用doctype声明,这不是XHTML,而是HTML(正如你用<meta http-equiv="Content-Type" content="text/html明确指出的那样。这显然意味着浏览器使用它们的解析器,而那些不支持(也不应该)支持XML的。对于空元素语法速记<element/>

2

短:。这不是一个bug尽管DOCTYPE,your page is not interpreted as XHTML(这是intentional)。 。

HTML根本不支持自闭标记语法,方法与的XML。

在HTML中,实践中<foo /><foo><foo /="">相同。理论上它与<foo></foo>&gt;相同。

您需要告诉浏览器将页面解释为X [HT] ML。 DOCTYPE是不够的。要在本地执行此操作,文件必须具有.xml.xhtml扩展名。当您通过HTTP提供文件时,您必须必须设置Content-Type标头为application/xhtml+xml或类似的XML类型(对于静态文件通常.xhtml文件扩展名执行此作业)。

您的实例将作为text/html提供,因此它不会被解释为XHTML,并且不会像您期望的那样工作。

BTW:XHTML不允许使用非标准元素。 如果无论如何你想添加你自己的元素,你至少应该使用你自己的命名空间。

0

简短回答:如果您向用户代理提供格式错误的数据,用户代理可能会做什么没有保证或要求。