gpt4 book ai didi

javascript - 使用来自已加载网页的 JavaScript 调用重新加载 WebView

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:40 27 4
gpt4 key购买 nike

我在加载特定网页的应用程序中有一个 WebView

在该网页上有一个按钮,它使用 JavaScript 调用 Android Activity 中的方法以重新加载 WebView 中的 URL(有效地将网络应用重置为其默认状态)。

由于这里有几个线程,我已经让 Android 的所有 JavaScript 接口(interface)正常工作,我可以弹出一个 Toast 来显示应用程序即将重新加载,但我WebView.loadUrl() 调用出现错误,如下所示。

java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {1d015c84} called on Looper (JavaBridge, tid 122148) {33703881}, FYI main Looper is Looper (main, tid 1) {1d015c84})

我猜这是因为进行重新加载的方法不在该 Activity 的 onCreate 方法中,该 Activity 执行所有其他 WebView 操作,但是我不确定这是否真的是问题所在,如果是的话如何解决 - 因为重新加载 URL 的方法需要在 JavascripInterface 类中才能从网页内访问。

最佳答案

出于某种原因,在 WebView 组件中加载页面(或重新加载)需要在 UI 线程上完成,因此只需将重新加载调用包装在 runOnUiThread 中即可解决此问题问题。

    @JavascriptInterface
public void reloadSite(){
Toast.makeText(mContext, getString(R.string.reloadingWebApp), Toast.LENGTH_LONG).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView = (WebView) findViewById(R.id.activity_main_webview);
mWebView.loadUrl(getString(R.string.web_app_url));
}
});
}

关于javascript - 使用来自已加载网页的 JavaScript 调用重新加载 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com