WebVIew问题HTML5 doctype

时间:2012-02-20 17:37:33

标签: cocoa html5 webview doctype

想象一个相当简单的HTML文档

<!DOCTYPE HTML >
<html>
<body>
<table>    <tr>    <td>    This is a test    </td>    </tr>    </table>
</body>
</html>

我们在哪里申请这个css

body {background-color: ffffff;
font-size:100px;
font-style: normal;
font-family: MankSans,Arial,Helvetica, sans-serif;
}

在每个现代浏览器中都会应用字体属性。然而,在我的WebView中,他们不会。

环顾四周,我发现问题是WebView进入quirksmode, td 标签缺少继承,因此body css不适用。

我知道有很多方法可以解决这个问题,例如使用更明确的4.01 doctype,或者将其添加到css中

table, thead, tbody, tr, td, th {
font-size: inherit;
font-family: inherit;
}
然而,这些并没有解决问题的根源,即当所有其他基于WebKit的浏览器(Safari,Chrome等)行为正确时,WebView决定突然“误解”HTML5文档类型并切换到quirksmode的所有逻辑

有没有办法以编程方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

好的,我的愚蠢错误
事实证明,doctype被搞砸了,因为在将HTML文档发送到webview之前我会对其进行处理,并为所有标记添加内部ID(我的应用程序内部的功能需要此内部ID)

但如果有人以同样的方式搞砸了我并且想知道发生了什么,我会提供一个长篇解释。

DOMDocumentType有几个字段,其中有name,publicId和systemId。

例如,考虑典型的HTML 4.01过渡文档类型

可分为

name = html
publicId = - // W3C // DTD XHTML 1.0 Transitional // EN
systemID = http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

只要保留格式,就可以为其添加自定义ID,如此

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" CustomID="1">

HTML 5 DOCTYPE的问题在于它看起来像a)

<!DOCTYPE html>

对于DOM,它实际上是b)

<!DOCTYPE html PUBLIC "" "">

长话短说,在a)的末尾添加我的CustomID =“1”导致DOM无法将其识别为有效的DOCTYPE,因此将我的WebView切换为quirksmode。如果您想拥有HTML5 DOCTYPE并为其添加自定义ID,则应该

<!DOCTYPE html PUBLIC "" "" CustomId="1">

w3schools.com告诉我们id属性在base,head,html,meta,script,style和title中无效。

他们应警告我们,放置不当,它也可以拧你的DOCTYPE =)