想象一个相当简单的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的所有逻辑
有没有办法以编程方式解决这个问题?
答案 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 =)