Проблемы с WebVIew HTML5 doctype - PullRequest
       15

Проблемы с WebVIew HTML5 doctype

1 голос
/ 20 февраля 2012

Представьте себе довольно простой 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 переходит в причудливый режим, где тегу td не хватает наследования, поэтому тело css не применяется.

Я знаю, что есть способы обойти это, например, использовать более явный тип документа 4.01 или добавить его в css

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

это, однако, не устраняет корень проблемы, заключающейся в том, что WebView решает против всей логики внезапно «неправильно понять» тип документа HTML5 и переключиться в режим quirksmode, когда все другие браузеры на основе WebKit (Safari, Chrome и т. Д.) Работают правильно .

Есть ли способ программно исправить это?

1 Ответ

0 голосов
/ 21 февраля 2012

Хорошо, моя глупая ошибка.
Оказывается, что тип документа искажается, потому что перед отправкой HTML-документа в веб-просмотр его обработали и добавили внутренний идентификатор ко всем тегам (этот внутренний идентификатор требуется для функций внутримое приложение)

но в случае, если кто-то испортит то же самое, что и я, и задаюсь вопросом, что происходит, я предложу длинное объяснение.

DOMDocumentType имеет несколько полей, среди которых естьname, publicId и systemId.

. Например, рассмотрим типичный HTML 4.01 переходный тип документа

, который можно разделить на

name = htmlpublicId = - // W3C // DTD XHTML 1.0 Transitional // ENsystemID = http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

, и вы можете добавить к нему пользовательский идентификатор до тех пор, пока сохраняется формат, например:

<!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 "" "">

Короче говоря, добавление моего CustomID = "1" в конце a) вызвалоDOM не распознает его как действительный DOCTYPE, следовательно, переключает мой WebView в режим причуд.Если вы хотите иметь HTML5 DOCTYPE и добавить к нему пользовательский идентификатор, вы должны сделать

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

w3schools.com, чтобы сообщить нам, что атрибут id недопустим в: base, head, html, meta,,сценарий, стиль и заголовок.

они должны предупредить нас о том, что при плохом размещении он также может испортить ваш DOCTYPE =)

...