Android调用js两种方法:

1,通过webview的loadURL方法,如果调用js方法的话,通过webview.loadUrl(“javascript:jsFun()”);如果该方法有参数,直接将参数拼接进去即可,比如webView.loadUrl(“javascript:jsFun(’” + msg + “’)”); 但是这种方法的调用方式,每次都会刷新页面。
2,通过WebView的evaluateJavascript(),这种方法调用js后,可以直接拿到js返回的结果,而且不会每次刷新页面,效率较高,但是版本兼容性较差,只支持Android4.4以上的手机,但现在4.4以下的手机基本很少了,如果用户群体设备基本在Android4.4以上的话,优先推荐这种方法。

Js调用Android的三种方法:
1,通过WebView的addJavascriptInterface()进行映射,被js调用的方法必须加@JavascriptInterface注解
2,通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url,然后解析该URL的协议,如果检测到是预先约定好的交互协议,就调用相应方法,这种方法 js不能接受到Android方法的返回值。
3,通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息,然后解析消息内容,其实这个方法和第二个差不多,最常用的就是通过拦截js的提示框prompt()方法,因为onJSPrompt调用较少,而且可以返回任意类型的值,操作方便灵活,而alert()对话框没有返回值,confirm()对话框只能返回确认和取消两种状态。

Webview优化:
1,如果加载的web页面内部有大量的图片,为保证整个页面的加载速度,可以先不加载图片,等页面finish后在发起图片的网络任务
2,自定义错误页面,根据webviewclient中onReceivedError回调拿到具体的错误,对应展示自己的错误页面
3,Webview开启硬件加速导致页面闪烁:4.0以上的系统我们开启硬件加速后,WebView渲染页面更加快速,拖动也更加顺滑。但有个副作用就是,当WebView视图被整体遮住一块,然后突然恢复时(比如使用SlideMenu将WebView从侧边滑出来时),这个过渡期会出现白块同时界面闪烁。解决这个问题的方法是在过渡期前将WebView的硬件加速临时关闭,过渡期后再开启
4,加载证书错误:webView加载一些别人的url时候,有时候会发生证书认证错误的情况,这时候我们希望能够正常的呈现页面给用户,我们需要忽略证书错误,需要调用WebViewClient类的onReceivedSslError方法,调用handler.proceed()来忽略该证书错误。
5,web音频播放销毁后还有声音:在页面销毁时,首先将webview从页面的容器中移除,然后调用removeallviews方法移除webview内所有的控件,然后调用destroy销毁webview并置空。
6,设置白名单:因为scheme使用有一定危险性,所以可以设置运行访问的白名单(客户端内的WebView都是可以通过客户端的某个schema打开的,而要打开页面的URL很多都并不写在客户端内,而是可以由URL中的参数传递过去的。使用scheme协议打开链接风险已经说明了scheme使用的危险性,那么如何避免这个问题了,设置运行访问的白名单。或者当用户打开外部链接前给用户强烈而明显的提示。)具体设置方法,在onPageStarted回调中,拿到URL和白名单中的URL进行对比
7,后台无法释放js导致手机耗电:如果页面退到后台,而页面中的webview还在执行动画之类的东西,导致资源无法释放而占用CPU,导致耗电特别快,这个时候可以再生命周期中对于webview的生命周期进行绑定,确保页面退到后台时,webview停止抢占CPU。
8,可以在页面开始加载的时候,优先吊起加载的进度,提升用户体验。
9,Webview明文密码优化:设置setSavePassword为false,避免用户允许保存密码后引发的安全隐患。(WebView 默认开启密码保存功能 mWebView.setSavePassword(true),如果该功能未关闭,在用户输入密码时,会弹出提示框,询问用户是否保存密码,如果选择是,密码会被明文保到 /data/data/com.package.name/databases/webview.db 中,这样就有被盗取密码的危险,所以需要通过 WebSettings.setSavePassword(false) 关闭密码保存提醒功能)

更多相关文章

  1. startService与bindService的区别
  2. Android常用固件修改
  3. Android通话默认打开扬声器的方法
  4. Android(安卓)ActionBar完全解析(下)
  5. Android应用数据存储几种方式(2)
  6. 12.2 HTTP请求
  7. 页面js判断浏览器类型
  8. 【Android(安卓)P】 JobScheduler服务源码解析(二) ——框架解析
  9. Android——使用ContentProvider在应用间传递数据

随机推荐

  1. Android切近实战(六)
  2. Android(安卓)岗社招面试该怎么准备?这份
  3. 3D引擎--可移植到Android的开源的引擎及
  4. Android(安卓)捕获Activity 返回
  5. 日拱一卒(二十一)
  6. 【android】读取通讯录
  7. Android(安卓)AESUtils 工具类与调用方法
  8. Android(安卓)Gson类型转换错误解决 com.
  9. Android(安卓)Root SuperUser su相关资源
  10. android数据库操作