Webview的使用和注意事项

1.webView是一个展示web网页的控件,继承 AbsoluteLayout

2.webview的俩个回调应用层:

1)webViewClient 这个对象的创建

  WebViewClient myWibviewVlient=new WebViewClient(){  

  /*当内核开始加载访问的url时,会通知应用程序,对每个main frame这个函数只会被调用一次,页面包含iframe 或者framesets 不会另外调用一次onPageStarted,当网页内内嵌的frame 发生改变时也不会调用onPageStarted。

  */

@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {

}

/**

  参数说明:

  @param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。

  @param url    即将要被加载的url

  @return  true 当前应用程序要自己处理这个url, 返回false则不处理。

*/@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {    // 消耗掉这个事件。Android中返回True的即到此为止吧,事件就会不会冒泡传递了,我们称之为消耗掉    mWebView.loadUrl(url);    return true;}

@Overridepublic void onPageFinished(WebView view, String url) {

}

@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){    //handler.cancel(); // Android默认的处理方式    handler.proceed();  // 接受所有网站的证书    // handleMessage(Message msg); // 进行其他处理}

@Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {    dismissLoadingProgress();}

};

2)WebChromeClient

(暂时没有用过,就不给大家分享了)

 

3.loadData与loadDataWithBaseURL的区别

在写WebView时,感觉LoadUrl太浪费流量,而且加载起来有点慢,就考虑用其它的方法来实现。在加载页面时,如果只加载数据,页面模板提前写好放到项目中,这样就可以来更快的加载页面,用户体验会好些。

如果不用loadUrl,省下的就只有LoadData和loadDataWithBaseURL了,下面来说下LoadData和loadDataWithBaseURL 的用法;

loadData:

public void loadData (String data, String mimeType, String encoding)

data:是要加载的数据类型,但在数据里面不能出现英文字符:‘#‘, ‘%‘, ‘\‘ , ‘?‘ 这四个字符,如果有的话可以用 %23, %25, %27, %3f,这些字符来替换,在平时测试时,你的数据时,你的数据里含有这些字符,但不会出问题,当出问题时,你可以替换下。

%,会报找不到页面错误,页面全是乱码。乱码样式见符件。

#,会让你的goBack失效,但canGoBAck是可以使用的。于是就会产生返回按钮生效,但不能返回的情况。

\ 和? 我在转换时,会报错,因为它会把\当作转义符来使用,如果用两级转义,也不生效,我是对它无语了。

我们在使用loadData时,就意味着需要把所有的非法字符全部转换掉,这样就会给运行速度带来很大的影响,因为在使用时,在页面stytle中会使用很多%号。页面的数据越多,运行的速度就会越慢。

data中,有人会遇到中文乱码问题,解决办法:参数传"utf-8",页面的编码格式也必须是utf-8,这样编码统一就不会乱了。别的编码我也没有试过。

public void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)

在使用loadDataWithBaseURL时,需要注意的就是 baseUr:虽然API上写的是要传一个Url,但我在用时,发现传一个Url并不可以,我发现这个就是一个标志位,用来标志当前页面的Key值的,而historyUrl就是一个value值,在加载时,它会把baseUrl和historyUrl传到List列表中,当作历史记录来使用,当前进和后退时,它会通过baseUrl来寻找historyUrl的路径来加载historyUrl路径来加载历史界面,需要注意的就是history所指向的必须是一个页面,并且页面存在于SD卡中或程序中(assets),loadDataWithBaseURL,它本身并不会向历史记录中存储数据,要想实现历史记录,需要我们自己来实现,也许是我的技术有限,我有了比较笨的访求来实现:就是在加载页面时,我把数据另外的写到一个html页面中,并把它保存到SD中,当点击返回时,它会通过historyUrl指向的路径来加载页面,这样就解决了历史记录问题。

当然baseUrl和historyUrl都可以为空

上面这两种方法,我建议使用后者,虽然loadData的历史记录不需要我们自己来实现,但在使用时,我们必须把所有的%,#,\,?转换掉,在转换时,也许会遇到别的困难,我也没有测完。这就两个加载上后者比前者快一到两倍。

       

时间: 2024-10-19 08:06:40

Webview的使用和注意事项的相关文章

Android WebView的loadData方法注意事项

loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码.需要如何处理呢?我们需要用UrlEncoder编码为%23, %25, %27, %3f . 可以使用以下两种代码,data为string类型的html代码 1 webView.loadData(URLEncoder.encode(data, "utf-8"), "text/html", "

webview使用总结及注意事项

1 网页 调用后台java代码 ,后台处理 一 网页上click事件 <a href="javascript:;" onclick="window.JsNativeMethod.showPropDetailPage(${item.id})" class="a-link"> <img src="${item.imgUrl}"> </a> <a class="txt-link t

WebView注入Java对象注意事项

在android4.2以前,注入步骤如下: [java] view plaincopy webview.getSetting().setJavaScriptEnable(true); class JsObject { public String toString() { return "injectedObject"; } } webView.addJavascriptInterface(new JsObject(), "injectedObject"); Andr

Android WebView中那些不得不解决的坑~~

前面那张hybrid开发心得 有人问 怎么解决不用onJsPrompt 来回调js函数的问题.其实很简单,就是在在你的jscalljava回调函数内 另外开个线程去load js代码即可: 1 wb.post(new Runnable() { 2 @Override 3 public void run() { 4 wb.loadUrl("javascript:display_alert()"); 5 } 6 }); 好,然后开始说一下webview.webview其实我一直都很痛恨这个

webview 属性以及整体介绍

extends AbsoluteLayout implements ViewGroup.OnHierarchyChangeListener ViewTreeObserver.OnGlobalFocusChangeListener java.lang.Object的    ? android.view.View      ? android.view.ViewGroup        ? android.widget.AbsoluteLayout          ? android.webkit

iOS开发常见BUG和一些小技巧(ps:耐心看完,很实用)

[385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Created by beyond on 15/6/6. // Copyright (c) 2015年 beyond.com All rights reserved. // 不一定要用继承,可以使用分类 #import MyScrollView.h #import CoView.h @implementation MyScrollView - (void)touchesBegan

iOS开发中遇到的一些问题及解决方案【转载】

iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Created by beyond on 15/6/6. //  Copyright (c) 2015年 beyond.com All rights reserved. //  不一定要用继承,可以使用分类 #import "MyScrollView.h" #import "CoView.

iOS开发中遇到的一些问题及解决方案

原文出处:http://sg31.com [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Created by beyond on 15/6/6. //  Copyright (c) 2015年 beyond.com All rights reserved. //  不一定要用继承,可以使用分类 #import "MyScrollView.h" #import "CoView.h" @impl

Android 4.4后WebView的一些注意事项

自Android 4.4起,Android中的WebView开始基于Chromium( 这大概是因为Android部门负责人从Andy Rubin变成了Chrome部门的主管Sundar Pichai了吧,^_^). 这个改变使得WebView的性能大幅度提升,并且对HTML5, CSS3, and JavaScript有了更好的支持. 那么,作为一个客户端开发者,我们写代码的时候需要注意哪些呢? 1.多线程 如果你在子线程中调用WebView的相关方法,而不在UI线程,则可能会出现无法预料的错