webview使用中遇到的坑
来源:互联网 发布:无限搭建卡盟主站源码 编辑:程序博客网 时间:2024/06/06 02:38
1. 硬件加速问题
需要开启硬件加速,在AndroidManifest.xml中进行设置。
否则会出现滚动效率低下,无法播放视频等问题。缺陷:占用内存大。
android:hardwareAccelerated=“true” 针对activity
2. 与js交互的问题
需要在页面load(url)之前,就把java对象注入页面。否则脚本执行时,java对象会找不到。
3. onPause的问题
webview在资源低下的情况下有可能自己进入onPause状态,此时页面会空白一片,如果不点击页面或者重新渲染,将没有画面出现(此问题在开启硬件加速后非常明显)。因此有必要对页面手动进行onResume处理。
4.onCreateWindow的问题
如何在onCreateWindow事件触发的时机取得url?使用hack的方法:
@Overridepublic boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {// 当前窗口数量已经达到上限,不能再开新窗口进行处理了if (TabViewManager.getInstance().getSize() == TabViewManager.MAX_TAB_SIZE) {WebView webview = new WebView(view.getContext());webview.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {TabViewManager.getInstance().getCurrentTabView().loadUrl(url, NavigateSource.NORMAL);return true;}});setWebViewTransport(webview, resultMsg);return true;}// 页面开启新窗口时调用WebView webview = (WebView) TabViewManager.getInstance().addTabView(false).getContentView().getWebView().getView();setWebViewTransport(webview, resultMsg);return true;}
5. 请求地理位置信息
在WebViewChromeClient中的onGeolocationPermission方法实现即可
6. HttpAuth,比如路由器填写用户名密码,需要验证的页面
需要在WebViewClient中实现onReceivedHttpAuthRequest方法
@Overridepublic void onReceivedHttpAuthRequest(WebView view, final HttpAuthHandler handler, String host, String realm) {// TODO Auto-generated method stubfinal CommonDialog dialog = new CommonDialog(view.getContext());String title = view.getContext().getString(R.string.auth_request_login);dialog.setTitle(title + host);dialog.setCenterView(R.layout.dialog_http_auth_request);dialog.setBtnOkListener(new OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss();EditText username = (EditText) dialog.findViewById(R.id.username);EditText password = (EditText) dialog.findViewById(R.id.password);handler.proceed(username.getText().toString(), password.getText().toString());}});dialog.setBtnCancelListener(new OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss();}});dialog.show();}
7. 广告拦截
需要实现WebViewClient的shouldInterceptRequest方法
注意:该方法不工作在主线程。因此需要对ui处理的,要抛到主线程去做
@Overridepublic WebResourceResponse shouldInterceptRequest(WebView webView, String url) {WebResourceResponse wr = null;if (ConfigManager.getInstance().isAdBlock() && mService != null) {IAdBlockService adBlockService = mService.getAdBlockService();String mainUrl = mUrl; // webView.getUrl();if (mainUrl == null) {mainUrl = url;}SimpleLog.d(TAG, "shouldInterceptRequest() " + "mainUrl:" + mainUrl + " url:" + url);try {if (adBlockService != null && adBlockService.isBlockSync(url, mainUrl)) {SimpleLog.d(TAG, "isBlocked!");try {wr = new WebResourceResponse("", "", null);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return wr;}
对于API21以上的客户端可以采用更好的方法。因为API21的shouldInterceptRequest方法提供了更多参数,比如页面的header信息等。
0 0
- webview使用中遇到的坑
- webview遇到的坑
- [开发总结]WebView使用中遇到的一些问题&解决
- [开发总结]WebView使用中遇到的一些问题&解决
- Android WebView 使用过程中遇到的问题与总结
- 使用webview遇到的问题
- webView中遇到一些坑
- 工作中关于webview同步cookie遇到的坑
- 使用webview调用第三方登录时候遇到的坑
- android webview全面使用讲解,以及一些遇到的坑
- Android WebView遇到的坑
- Android--webview遇到的坑
- 工作中遇到关于WebView的效果
- QML使用WebView遇到的QSslSocket问题解决 webview seturl无效
- QML使用WebView遇到的QSslSocket问题解决
- QML使用WebView遇到的QSslSocket问题解决
- QML使用WebView遇到的QSslSocket问题解决
- WebView 使用JS遇到的问题
- PHP错误:iconv() Detected an illegal character
- LibSVM学习(三)——LibSVM使用规范
- 数学之美番外篇:平凡而又神奇的贝叶斯方法
- ArcMap连接Oracle数据库
- swift一句话总结-定义与初始化
- webview使用中遇到的坑
- 特征选择常用算法综述
- HDU 5122 K.Bro Sorting 2014ICPC 北京站现场赛
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- 51nod 1287: 加农炮 好题啊好题
- c#Serializable
- jquery serialize传中文乱码解决方法
- 条件随机场 conditional random fields 及代码实现
- java多态的实现原理