【问题标题】:WebVIew problems HTML5 doctypeWebVIew 问题 HTML5 文档类型
【发布时间】:2012-02-20 17:37:33
【问题描述】:

想象一个相当简单的 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 文档类型,或者将其添加到 css

table, thead, tbody, tr, td, th {
font-size: inherit;
font-family: inherit;
}

然而,这些并不能解决问题的根源,即当所有其他基于 WebKit 的浏览器(Safari、Chrome 等)行为正常时,WebView 决定反对所有逻辑突然“误解”HTML5 文档类型并切换到 quirksmode .

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

【问题讨论】:

  • 您是否遗漏了起始 html 标记?还是你忘记复制了?
  • 忘记复制了。我编辑了原始问题。

标签: cocoa html webview doctype


【解决方案1】:

好吧,我的愚蠢错误
事实证明,doctype 被搞砸了,因为在将 HTML 文档发送到我正在处理它的 webview 之前,并为所有标签添加了一个内部 ID(我的应用程序中的功能需要这个内部 ID)

但如果有人像我一样搞砸并想知道发生了什么,我会提供一个冗长的解释。

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

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

可以分为

名称 = html
publicId = -//W3C//DTD XHTML 1.0 过渡//EN
系统ID = 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 =)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2012-06-03
    • 2011-10-04
    • 2011-03-24
    相关资源
    最近更新 更多