WebView和浏览器解析HTML/JavaScript的区别

4

我发现在安卓浏览器和WebView之间存在一个非常奇特的差异。具体来说,我有以下标记:

<script type="text/javascript">
    <!--

    // some js code...

    // -->
</script>

现在,在浏览器中,这个功能完美运行。然而,当使用loadData(markup,“text / html”,“utf-8”)WebView中加载标记时,JavaScript代码根本不会被执行。
现在,如果我删除HTML注释标记(<!---->),它在WebView中也可以正常工作。然而,我不想这样做,因为标记来自Web服务,我宁愿不更改它。
是否有什么我可以在WebView中使用以接受这个标记的方法?

顺便说一句,https://dev59.com/n3RA5IYBdhLWcg3w1BmW#808850 - CommonsWare
除此之外,由于您拥有HTML作为“字符串”,如果您想要的话,可以自己解析出注释。 - CommonsWare
@CommonsWare 我知道这是一个非常老的习惯,但这就是这个 Web 服务返回数据的方式。而且,它似乎是一个非常普遍的习惯,所以我觉得WebView处理它失败是很奇怪的,特别是当浏览器应用可以正确地处理它时。在这种情况下,我更愿意避免使用字符串解析,这看起来很像黑客行为 :). - Felix
我怀疑你除了字符串解析方法之外没有太多选择。你可以在上面提出问题 - 当我搜索时,我没有看到任何问题 - 也许你会得到官方声明。 - CommonsWare
@CommonsWare 已完成。请随意添加答案,以便我可以将其标记为已接受。 - Felix
1个回答

2
总的来说,将JavaScript放在注释中的技巧似乎不再是推荐的模式,因此我鼓励您重新考虑继续以这种方式提供服务的计划。
显然,您已经在WebView中启用了JavaScript,否则当您尝试删除注释时它将无法工作。我不知道有其他设置可以告诉WebView忽略注释标记。
您可以检查AOSP浏览器代码,尝试找出他们做了什么,但那段代码又难看又冗长。您可以在将HTML交给WebView之前修补HTML。您可以在WebView上设置特定的用户代理,并让您的Web服务为该用户代理返回清理过的HTML,使其余的Web服务客户端不受影响。您可以查看是否收到您的错误报告的响应,尽管不能保证会得到这样的响应。
除此之外,我没有别的想法了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接