Js调用Android交互

   webSettings.setJavaScriptEnabled(true);
    // 设置允许JS弹窗
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    web_view.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    web_view.setWebViewClient(webViewClient);
    web_view.setWebChromeClient(webChromeClient);

    //web_view.addJavascriptInterface(new AndroidJS(),"android");
}
WebViewClient webViewClient=new WebViewClient(){
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
       tv_start.setText("开始加载!");
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        tv_end.setText("加载完成了");
        view.addJavascriptInterface(new AndroidJS(),"android");//为什么在这里调用js交互android
    }
    @SuppressLint("JavascriptInterface")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);

        return true;
    }
};

 

通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url(有问题,报了"ReferenceError: android is not defined")

class

    class AndroidJS{
   


        @JavascriptInterface
       public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);

        return true;
    }


        
    }

这样试一试呢

我是JS交互android 通过第二种方式,通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url实现交互,交互不了
view.addJavascriptInterface(new AndroidJS(),"android");//为什么在这里调用js交互android,交互不了,
public class AndroidJS {
    /*private Context context;

    public AndroidJS(Context context) {
        this.context = context;
    }*/
    @JavascriptInterface
    public void callFinish() {
        Log.d("aa","js调用");
        Log.i("callFinish", "Thread:" + Thread.currentThread());
    }
}

JS那边通过调用:android.callFinish();

https://blog.csdn.net/qq_20800531/article/details/107173988?spm=1001.2014.3001.5501

交互方法单独写,需要用的地方调用,看起来清晰

js调用Android原生:

声明@JavascriptInterface,进行对象映射

这种是可以实现的