【问题标题】:Difference in HTML/JavaScript parsing between WebView and browserWebView 和浏览器在 HTML/JavaScript 解析上的区别
【发布时间】:2013-08-16 07:40:56
【问题描述】:

我在 Android 浏览器和WebView 之间发现了一个非常特殊的区别。即,我有以下标记:

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

    // some js code...

    // -->
</script>

现在,在浏览器中,一切正常。但是,当使用loadData(markup, "text/html", "utf-8") 加载WebView 中的标记时,JavaScript 代码根本不会执行。

现在,如果我删除 HTML 注释标签(&lt;!----&gt;),它在 WebView 中也可以正常工作。但是,这不是我想做的事情,因为标记来自我不想更改的 Web 服务。

我可以用WebView 做些什么来接受这个标记吗?

【问题讨论】:

  • 除此之外,由于您的 HTML 为 String,因此您可以根据需要自行解析评论。
  • @CommonsWare 我知道这是一个非常古老的习惯,但这正是这个 Web 服务返回它的方式。此外,这似乎是一个非常普遍的习惯,所以我觉得很奇怪WebView 失败得如此糟糕,尤其是当浏览器应用程序正确处理它时。而且我宁愿远离字符串解析,在这种情况下似乎很hackish :)。
  • 我怀疑除了字符串解析方法之外你还有很多选择。欢迎您就它提出问题——我在搜索时没有看到一个问题——也许你会得到一份关于它的官方声明。
  • @CommonsWare done。随意添加答案,以便我将其标记为已接受。

标签: javascript android html android-webview android-browser


【解决方案1】:

总的来说,put-the-JavaScript-in-comments trick appears to be no longer the recommended pattern,所以我鼓励你重新考虑你的计划,继续以这种方式服务。

您显然已经在WebView 中启用了 JavaScript,否则当您尝试删除 cmets 时它将无法正常工作。我知道没有其他设置可以告诉WebView 忽略评论标记。

欢迎您检查 the AOSP Browser code 以尝试找出他们的工作,尽管该代码令人讨厌、野蛮且冗长。您可以先修补 HTML,然后再将其交给WebView。您可以在WebView 上设置一个特定的用户代理,并让您的Web 服务为该用户代理交回清理过的HTML,而使您的其余Web 服务客户端不受影响。您可以查看是否收到了对 your bug report 的回复,但不能保证会收到这样的回复。

除此之外,我没有想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多