【问题标题】:Set quirk for WebView为 WebView 设置怪癖
【发布时间】:2014-11-28 04:39:09
【问题描述】:

我有一个包含 WebView 的应用程序。当<!DOCTYPE html> 未在 HTML 页面中定义时,它会产生意外错误,因为我运行的 sn-ps 仅与 HTML5 兼容

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

所以如果页面的 HTML 声明没有指定,它会在 HTML5 中自动渲染。

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

编辑

我有 500 多个这样的 sn-ps,使用直接嵌入的 SVG etc -

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

这些 sn-ps 在其他版本的 HTML 上运行不佳。在每一页上写&lt;!DOCTYPE html&gt; 实际上我没有任何问题,但我担心我的客户可以看到、编辑和修改我的 sn-ps 甚至创建一个新的 sn-p

我将我的应用程序提供给我的朋友进行测试,他们中的许多人抱怨他们创建的 sn-ps 无法正常运行,我认为我的客户也会发生同样的事情。

请帮忙

【问题讨论】:

  • 仅供参考,每次添加 都是正常操作。您应该(并注意必须)提供您正在使用的 HTML 版本。
  • 大家都试过在 Google Chrome 或 Firefox 上运行一段 HTML 代码吗?您是否注意到,如果您没有添加&lt;DOCTYLE ...&gt;,页面将自动以最新可用的 HTML 版本呈现?这就是我要的。我想设置一个默认的 &lt;DOCTYPE ...&gt; 东西,如果我没有在 我的任何 HTML 文件中指定哪个 HTML 版本。
  • 我不是在讽刺兄弟。我虽然问题对你来说不是很清楚。我正在为好的答案提供赏金所以也祝你有美好的一天。
  • 我并没有真正得到您包含此内容的要求。您是从外部资源中提取 html 还是包含自己的 sn-ps?请给我们一些代码示例,以便我们了解您为什么需要它。
  • 请检查我的编辑

标签: java android html webview quirks-mode


【解决方案1】:

编辑: Chrome for Android 不使用 WebView [Source]:

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

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

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


我认为这可能的唯一方法(基于我的搜索)是覆盖 WebView 行为并改为执行以下操作:

  1. 捕获预期的网址
  2. 使用HttpClient获取页面内容
  3. 检查 标签,如果不存在则添加
  4. 使用WebView.loadDataWithBaseURL 呈现WebView 中的HTML 并指定在步骤1 中捕获的基本url

很明显,这很 hacky,我无法确认它是否有效。所以目前最好的解决方案是在每个页面上指定一个标签。如果这需要在加载/允许客户端创建它们之前验证 sn-ps,那就这样吧。

【讨论】:

  • 投反对票?我想沉默和没有解决方案比试图帮助的人更可取......
  • 我没有对你投反对票。谢谢你的建议。但我仍然想知道 Chrome for Android 是如何做到的。
  • 是的,我也是。当 Google 似乎赋予自己特权时,这令人沮丧。
  • 查看我的编辑。 Android 版 Chrome 似乎不是基于 WebView。
  • 所以我认为我需要以其他方式实现它。感谢您的回答。如果我找到办法,我一定会回复你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多