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,进行对象映射
这种是可以实现的