与此处相同标题的其他问题不同,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/