为WebView设置怪癖

Con*_*use 6 java html5 android webview quirks-mode

我有一个包含WebView的应用程序.如果<!DOCTYPE html>未在HTML页面中定义,则会产生意外错误,因为我运行的片段仅与HTML5兼容.

因此<!DOCTYPE html>,我不是每次都写,而是简单地设置默认的怪癖(quirk是一个默认的HTML声明,如果没有指定页面的HTML版本,将使用它).

因此,如果未指定页面的HTML声明,它将自动在HTML5中呈现.

关于如何做到这一点的任何想法?主流浏览器使用此技术(包括Android版Chrome).

编辑

使用直接嵌入式SVG 我有500多个这样的片段-

<svg width="300" height="200">
    <polygon points="100,10 40,198 190,78 10,78 160,198"
             style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
</svg>
Run Code Online (Sandbox Code Playgroud)

这些代码段在其他版本的HTML上运行不佳.我实际上并没有<!DOCTYPE html>在每个页面上写任何问题,但我担心我的客户可以查看,编辑和修改我的代码段,甚至创建一个新的代码段.

我把我的应用程序交给了我的朋友进行测试,他们中的许多人抱怨他们创建的代码片段运行不正常,我认为我的客户也会发生同样的事情.

请帮忙

Jst*_*wll 1

编辑: Android 版 Chrome 不使用 WebView [来源]:

这是否意味着 Android 版 Chrome 正在使用 WebView?

不,Android 版 Chrome 与 WebView 是分开的。它们都基于相同的代码,包括通用的 JavaScript 引擎和渲染引擎。

因此他们在正常的 WebView 行为之上添加了此功能。你想要完成的事情是不可能的。


我认为唯一可能的方法(根据我的搜索)是覆盖行为WebView并执行类似的操作:

  1. 捕获预期的 url
  2. 用于HttpClient获取页面内容
  3. 检查<!DOCTYPE>标记,如果不存在则添加
  4. 用于WebView.loadDataWithBaseURL渲染 中的 HTMLWebView并指定在步骤 1 中捕获的基本 url

显然,这是非常hacky的,我无法确认它是否有效。所以到目前为止最好的解决方案是在每个页面上指定一个<!DOCTYPE>标记。如果这需要在加载/允许客户端创建片段之前验证片段,那就这样吧。