javascript - 尝试在 WebView 中调用 javascript 时出现 "Connection to the server was unsuccessful"

标签 javascript android cordova

与此处相同标题的其他问题不同,PhoneGap/Android 应用程序工作正常,并加载 View 和外部链接的 javascript 文件,除非我尝试从 Java 端调用 javascript 方法。我这样调用该方法:

public void update(final String data) {
    appView.post(new Runnable(){
        @Override
        public void run(){
            loadUrl("javascript: dispatch('" + data + "')");
        }
    });
}

并且 update 在非 UI 线程中调用。

问题是,我正在调用 javascript 方法,并且该功能运行,工作正常,并且执行了我所期望的操作,但几秒钟后,应用程序崩溃并显示错误消息“连接到服务器失败”并且我调用的方法的名称。我尝试按照其他问题中的建议增加超时,但在超时结束时它仍然崩溃。

顺便说一句,我还收到有关从非 UI 线程调用 WebView 方法的警告,这就是我添加 post 调用的原因,所以我不确定为什么会发生这种情况,但是它发生在日志中的超时错误之前,所以也许它是相关的?

编辑:

当崩溃发生时,我在日志中收到此错误。

03-26 15:21:38.671: W/webview(3159): java.lang.Throwable: Warning: A WebView method was called on thread 'Thread-206'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
03-26 15:21:38.671: W/webview(3159):    at android.webkit.WebView.checkThread(WebView.java:9468)
03-26 15:21:38.671: W/webview(3159):    at android.webkit.WebView.stopLoading(WebView.java:2253)
03-26 15:21:38.671: W/webview(3159):    at org.apache.cordova.DroidGap$1$1.run(DroidGap.java:549)
03-26 15:21:38.671: W/webview(3159):    at java.lang.Thread.run(Thread.java:856)
03-26 15:21:38.675: E/DroidGap(3159): DroidGap: TIMEOUT ERROR! - calling webViewClient

我被告知 appView.post 会避免这种情况,因为它会导致 loadUrl 调用在 UI 线程中发生。显然事实并非如此?

编辑:

问题已解决。作为记录,我将 loadURL 行更改为:

sendJavascript("dispatch('" + data + "')");

而且它有效。

最佳答案

您最好调用:

this.sendJavaScript("dispatch(('" + data + "')");

如果您的 Java 类正在扩展插件。

关于javascript - 尝试在 WebView 中调用 javascript 时出现 "Connection to the server was unsuccessful",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877638/

相关文章:

android - 有没有办法一次性安装、重新安装或更新所有cordova 插件?

javascript - 如何在 Onsen UI 中从一个页面导航到另一个页面

javascript - 如何使用正则表达式替换花括号中的所有子字符串?

javascript - 如果满足条件,如何更改 div 中每个 p 的颜色?

Android Studio 渲染错误 xml 文件

android - 我的 Android 应用程序显示为 "this item is not compatible with your device"

android - 小窗口中的Webview

javascript - 尝试使用knockout js将不同数据绑定(bind)到同一div时显示重复记录

javascript - angular-meteor 不适用于 Meteor 1.3 更新

ios - 如何在 phonegap 项目的启动画面后添加 UIViewController?