Android webview 第二次没有加载 URL

rko*_*rko 8 javascript android webview

我有加载到 web 视图中的动态 URL。我使用 WebChromeClient 来处理 java 脚本事件,因为我需要根据 onJsAlert() 中来自 javascript 的事件重定向用户。网页是第一次加载。当我返回并加载相同的 url 时,它的加载。但是,当我完成操作并收到 javascript 事件时,我开始了一个新活动并完成了 webview 活动。现在,当我加载另一个 URL 时,它没有加载。当我终止应用程序并导航到 webview 活动时,它会再次加载。

以下是我对 webview 的设置

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);
        webView.getSettings().setDomStorageEnabled(true);

        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setAppCacheEnabled(false);

        webView.setWebViewClient(new myWebClient());
        webView.setWebChromeClient(new MyJavaScriptChromeClient());
        webView.loadUrl(signatureURL);
        webView.setHorizontalScrollBarEnabled(false);
Run Code Online (Sandbox Code Playgroud)

这是我用来显示进度对话框的 WebViewClient


public class myWebClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (((BaseActivity) activity).checkConnection()) {
                // TODO Auto-generated method stub
                progressBar.setVisibility(View.VISIBLE);
                view.loadUrl(url);
            }
            return true;

        }

        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
            progressBar.setVisibility(View.GONE);
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);
            progressBar.setVisibility(View.GONE);
        }
    }

Run Code Online (Sandbox Code Playgroud)

这就是我处理 JS 事件的方式


private class MyJavaScriptChromeClient extends WebChromeClient {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
            //Check message for success/failure of payment
           Log.i("message",message);
           if (message.equals("Payment Fail")){
               dgAlert("Payment Failed");
           }
           else if (message.equals("Payment Success")){
               dgAlert("Payment Success");
           }
            return true;
        }
    }

Run Code Online (Sandbox Code Playgroud)

这就是我在点击警报对话框上的确定按钮时所做的

Intent intent=new Intent(Payment.this, DashBoardActivity.class);
startActivity(intent);
if (message.equals(Constants.CANCELLED)) {
   activity.finishAffinity();
   System.exit(0);
 } else
activity.finish();
Run Code Online (Sandbox Code Playgroud)

Moh*_*nas 0

我知道已经晚了,但这可能对其他人有帮助。您可以尝试在 WebChromeClient 中返回 false,如下所示:

private class MyJavaScriptChromeClient extends WebChromeClient {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
        //Check message for success/failure of payment
       Log.i("message",message);
       if (message.equals("Payment Fail")){
           dgAlert("Payment Failed");
       }
       else if (message.equals("Payment Success")){
           dgAlert("Payment Success");
       }
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

它会工作得很好。