最近公司项目要用到js交互,第一次这样写,看了别人的教程,然后依样画葫芦,个中过程就不说啦,写点有用的,留着以后自己看!
@SuppressLint("JavascriptInterface") private void showWebView() { try { webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDefaultTextEncodingName("utf-8"); webView.addJavascriptInterface(new JsOperation(activity,context), "jsObj");//暴露给js的对象 // webView.loadUrl("file:///android_asset/index.html"); webView.loadUrl(Contants.WebUrl.LOGIN_URL); webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if( url.startsWith("http:") || url.startsWith("https:") ) { return false;//设置false防止页面重定向无法返回到上级 } // Otherwise allow the OS to handle things like tel, mailto, etc. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity( intent ); return true; } }); } catch (Exception e) { e.printStackTrace(); } }
------------------------------------------分割线----------------------------------------------------------
JsOperation(activity,context)是js调用的方法类,里面定义的js调用的方法
----------------------------------------------------------------------------------------------------------
public class JsOperation { private static final String TAG = JsOperation.class.getSimpleName(); Activity mActivity; Context context; public JsOperation(Activity activity, Context mContext) { mActivity = activity; context = mContext; } @JavascriptInterface public void loginFail(final String msg) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { ToastUtil.defaultToast(mActivity, msg); } }); } /** * 登录成功调用此方法 */ @JavascriptInterface public void loginSucceed() { Intent intent = new Intent(context, MainActivity.class); context.startActivity(intent); mActivity.finish(); }}注意每个方法都要加上红色字体部分的,不然调用不成功
js不会,代码同事那里的在。悲催...
这只是java给js调用的部分,先记着