【问题标题】:Reloading a WebView with a JavaScript call from a loaded web page使用已加载网页中的 JavaScript 调用重新加载 WebView
【发布时间】:2016-01-24 17:27:26
【问题描述】:

我在加载特定网页的应用中有WebView

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

由于这里有几个线程,我已经让 Android 的所有 JavaScript 接口都工作了,我可以弹出一个 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})

我猜这是因为执行重新加载的方法不在此活动的 onCreate 方法中,该方法执行所有其他 WebView 的东西,但我不确定这是否真的是问题以及如何解决它 - 因为重新加载 URL 的方法需要在 JavascripInterface 类中才能从网页中访问。

【问题讨论】:

    标签: javascript java android android-webview


    【解决方案1】:

    由于某种原因,需要在 UI 线程上加载 WebView 组件中的页面(或重新加载),因此只需将 reload 调用包装在 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));
                }
            });
        }
    

    【讨论】:

    • 工作得非常好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多