使用 JavaScript 调用从加载的网页重新加载 WebView

Fat*_*onk 3 javascript java android android-webview

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

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

由于这里有几个线程,我已经让 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})
Run Code Online (Sandbox Code Playgroud)

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

Fat*_*onk 6

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));
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)