0

我的 Android 应用程序将 JS 代码注入 WebView。它针对的是 Android 3.1,但我遇到了 Android 6 和 7 的问题,因为 WebView 现在内部是铬,所以它不是旧的 WebView。

不过这个问题很奇怪,所以我不认为这是因为我的应用程序强制使用 Android 6 和 7 的怪癖模式。

我的应用程序使用所有有用的调用来加载在 Java 代码和 JS 代码之间创建绑定的 JS 接口,并且它适用于以前的版本。在这些指令(addJavascriptInterface() 方法)之后,它执行“假”加载以确保加载 JS 接口:

webView.loadData("", "text/html", null);

并且当“页面”被加载时,它执行真实url的加载,即本地文件(file:///...);当它也被加载时,一个脚本被注入并执行。

我的经验是,我在 log cat 上不断收到以下错误:

Cannot call determinedVisibility() - never saw a connection for the pid:

我尝试了关于这个的各种建议,但没有成功:

它是“data:text/html” url,不断被加载,我可以阻止它只加载一个空的 url,但是 JS 界面丢失了。

我该怎么做才能保留 JS 界面并阻止无限加载循环?

4

1 回答 1

0

此类问题已通过更改第一个“假”调用来解决,该调用旨在有效地将 JS 接口(它是必需的)添加到 WebView。

上面提到的方法,用这个指令:

webView.loadData("", "text/html", null);

仅适用于早于 Android 6.x 的版本(它可能取决于设备,因此它也可能在 4.4 和 5.x 上失败,但我的应用程序同时适用于两者)。

因此,适用于所有版本的正确方法是加载目标文件两次(第一个完成后执行新加载),

或者也可以先加载另一个文件(如正文中没有内容的简单 HTML),然后再加载目标文件(当第一次加载完成时)。

于 2016-12-06T12:52:08.893 回答