WebView总结

时间:2024.4.7

1.AndroidManifest.xml中必须使用许可”android.permission.INTERNET”,否则会出Web page not available错误。

2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。 webview .getSettings().setJavaScriptEnabled(true);

3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebView Client对象。mWebView.setWebViewClient(new WebView Client(){

publicbooleanshouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。[code]public booleanonKeyDown(intkeyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) &&mWebView.canGoBack()) {

mWebView.goBack();

return true;

}

returnsuper.onKeyDown(keyCode, event);

下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以为所欲为了。

看一个实例: public class WebView Demo extends Activity {

privateWebViewmWebView;

private Handler mHandler = new Handler();

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.webview demo);

mWebView = (WebView ) findViewById(R.id.webview );

WebSettingswebSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

mWebView.addJavascriptInterface(new Object() {

public void clickOnAndroid() {

mHandler.post(new Runnable() {

public void run() {

mWebView.loadUrl("javascript:wave()");

}

});

}

}, "demo");

mWebView.loadUrl("file:///android_asset/demo.html");

}

} [/code]我们看addJavascriptInterface(Object obj,StringinterfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是interfaceName(demo),作用域是 Global。这样初始化webview后,在webview加载的页面中就可以直接通过javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。

[code]<html>

<script language="javascript">

function wave() {

document.getElementById("droid").src="android_waving.png";

}

</script>

<body>

<a onClick="window.demo.clickOnAndroid()">

<img id="droid" src="android_normal.png"/><br>


第二篇:UIWebView的学习总结


UIWebView的学习总结

我们经常会在应用开发的过程中遇到很多需要用到UIWebView的情况,以前不怎么了解UIWebView,利用工作的间接期,我去针对性地学习了一下这种控件的知识,了解了好多此方面的用途,受益匪浅。

以前我们在做IPTV项目时,在用户登录界面有个悬而未决的功能,我借此拿来试验了一下,通过应用UIWebView实现了用户注册的作用,我们没有必要去专门针对这一项去做一个界面,只需要通过一个按钮引擎触发相应的注册站点信息即可,获取注册站点的Url,打开连接就达到了目的,减少了工作量以及代码量,起到一个两全其美的好处。下面我详细讲解下我自己做得东西:

在一个视图上只需要添加一个按钮,点击按钮就触发了注册站点的URL地址,打开站点就实现了,很实用方便的用法,后来我了解到在TableView的每个cell中都可以添加webview,

自己用uiwebview做一个浏览器,添个返回按钮就是,当然这同时结合了JS(java script),同样可以加载本地的html文件,说到加载本地的html文件,想到以前项目中有个help界面最好用webview来写,这样修改内容只需要更换html文件中的东西就好了,不必要再修改程序代码,加载本地文件我用了这个函数是加载Documents里边的文件,如果是你App内部的,需要改一下代码

NSString *mainBundleDirectory = [[NSBundlemainBundle] bundlePath];

NSString*path=[mainBundleDirectory stringByAppendingPathComponent:docName];

UIWebview的加载方式我一开始了解了两种:一种是通过文件加载,类似在浏览器上输入URL或者本地文件路径

加载代码:

#import "IpadWebViewViewController.h"

@implementation IpadWebViewViewController

@synthesize MyWebview;

// 程序主流程

- (void)viewDidLoad {

// 初始化

[[UIApplicationsharedApplication] statusBarOrientation];

[superviewDidLoad];

// 从 URL 中载入一个 html 页面

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

[self.MyWebviewloadRequest:[NSURLRequestrequestWithURL:url]]; }

还有一种是将一段HTML源码直接赋给UIwebview

代码如下:

#import "IpadWebViewViewController.h"

@implementation IpadWebViewViewController

@synthesize MyWebView;

// 程序主流程

- (void)viewDidLoad {

// 初始化

[[UIApplicationsharedApplication] statusBarOrientation];

[superviewDidLoad];

// 从 APP 包内载入一个 html 页面

NSString *htmlPath = [[[NSBundlemainBundle] bundlePath]

stringByAppendingPathComponent:@"webapp/index.html"];

// NSString *htmlPath = [[[NSBundlemainBundle] resourcePath]

stringByAppendingPathComponent:@"webapp/index.html"];

[self.MyWebviewloadRequest:[NSURLRequestrequestWithURL:

[NSURL fileURLWithPath:htmlPath]]];

}

后来我还知道了可以webview 直接在 UIWebView 中写入一段 HTML 代码htmlPath似乎是一个必须的参数,而 htmlString是可可以直接写成

NSString *htmlString = @”<html ….”;不是必须从一个文件来获取 HTML 串的

#import "IpadWebViewViewController.h"

@implementation IpadWebViewViewController

@synthesize MyWebview;

// 程序主流程

- (void)viewDidLoad {

// 初始化

[[UIApplicationsharedApplication] statusBarOrientation];

[superviewDidLoad];

// 读入一个 HTML

NSString *htmlPath = [[[NSBundlemainBundle] bundlePath]

stringByAppendingPathComponent:@"webapp/loader.html"];

NSString *htmlString = [NSStringstringWithContentsOfFile: htmlPath

encoding:NSUTF8StringEncoding error:NULL];

[self.MyWebviewloadHTMLString:htmlStringbaseURL:[NSURL

fileURLWithPath:htmlPath]];

UIWebView 虽然有很多好处,但是也同样存在缺陷如: 它可能处在一个没有网络的环境中,却在傻傻的等待服务响应。 或是打开一个远端网络时,在数据没有加载前,长时间显示一个白屏(浏览器的个性)。所以针对这个问题我了解了一下也做了实验,在应用程序启动时,我希望去检查一下网络,比如和 Google.com 做一次链接。 如果这个链接正常,那好,APP 可以继续往下工作,但因为这个检测不是一个异步的运行过程,( 我现在还不了解异步启动一个进程的方法) 在等待网络相应过程中,很容易将 APP 卡在启动动画中,而不是停在 Loading 的页面。这个有点像死机的感觉,所以,我希望网络检测不是放在APP 启动过程中,而是 Loading 页面加载完之后。其实苹果在COCOA机制中就已经做了这个处理:下面是我找到苹果中自带的两种方法:

- (void)viewDidLoad

是 APP 在启动时运行的第一个方法

- (void)webViewDidFinishLoad:(UIWebView *)webView

是 UIWebView 每次加载完 HTML时调用一此方法

那么这个问题就解决了,我们在启动应用程序的时候可以检查网络状态

1. 在 View 加载完时,加载 UIWebView 并显示出 Loader 页面

- (void)viewDidLoad {

// 初始化

[[UIApplicationsharedApplication] statusBarOrientation];

[superviewDidLoad];

// 读入一个 HTML

NSString *htmlPath = [[[NSBundlemainBundle] bundlePath]

stringByAppendingPathComponent:@"webapp/loader.html"];

NSString *htmlString = [NSStringstringWithContentsOfFile: htmlPath

encoding:NSUTF8StringEncoding error:NULL];

[self.MyWebviewloadHTMLString:htmlStringbaseURL:[NSURL

fileURLWithPath:htmlPath]];

}

2. 当 loader 页面加载完后,开始作网络检,具体网络检查的代码后面会描述

- (void)webViewDidFinishLoad:(UIWebView *)webView {

// 检查网络

BOOL netConnect = [self CheckNetworkStatus];

// 如果网络通畅

if (netConnect == YES) {

// 开始登录

} else {

// 网络链接失败,操作显示

}

}

通过以上的学习我们可以看出应用UIWebview可以很轻松地在应用程序中打开UIL站点地址,访问网络上得网页来进行相关的操作,应用以前网页已经存在的东西,减免了数据平台的冗余,不必要所有东西都通过后台的搭设来实现,而且当遇到问题修改起来也会显得异常方便。

以上就是我最近的收获,希望能通过不断地学习了解更多的东西!

更多相关推荐:
Android WebView使用总结

AndroidWebView使用总结1WebView中shouldOverrideUrlLoading和onPageStarted方法的区别WebView中的shouldOverrideUrlLoading和o...

功夫茶具的介绍(含图片)

功夫茶具的介绍带图片茶具的详细介绍茶具一词最早在汉代已出现据西汉辞赋家王褒憧约有烹茶尽具酺已盖藏之说这是我国最早提到茶具的一条史料现代主要指茶壶茶杯茶勺等这类饮茶器具古代茶具的概念指更大的范围按唐文学家皮日休茶...

功夫茶具如何使用

中国茗茶网专业茶具购物网站中国茗茶网网站功夫茶具使用方法人们口中的茶具一般都指茶壶而随着茶行业的不断发展功夫茶具也越来越讲究了今天小编为大家介绍功夫茶具使用方法一起来看看下面10种功夫茶具使用方法第一茶壶功夫茶...

功夫茶具的分类及作用

功夫茶具的分类及作用基本的功夫茶泡茶工具有茶罐茶壶茶盘茶道组茶杯盖碗公道杯过滤网茶巾茶罐储存茶叶的罐子根据不同的茶叶选择不同材质的茶罐比如存放铁观音或茉莉花茶等香味重的茶宜选用锡罐瓷罐等不吸味的茶罐而普洱茶在存...

功夫茶具介绍

功夫茶具介绍饮茶离不开茶具功夫茶具指泡饮茶叶的专门器具包括茶壶茶碗茶杯茶盘茶托等等古人讲究饮茶之道的另一个重要表现是非常注重茶具的本身的艺术一套精致的茶具配合色香味三绝的名茶可谓相得益彰下面介绍泡功夫茶的必备的...

功夫茶具介绍

紫砂壶茶具套装天下茶具尽在茶具之家功夫茶具介绍饮茶离不开功夫茶具功夫茶具指泡饮茶叶的专门器具包括壶碗杯盘托等古人讲究饮茶之道的另一个重要表现是非常注重功夫茶具的本身的艺术一套精致的功夫茶具配合色香味三绝的名茶可...

功夫茶具的选用

功夫茶具的选用功夫茶具按其狭义的范围是指茶杯茶壶茶碗茶盏茶碟茶盘等饮茶用具我国的茶具种类繁多造型优美除实用价值外也有颇高的艺术价值因而驰名中外为历代饮茶爱好者所青睐由于制作材料和产地不同而分陶土茶具瓷器茶具漆器...

javaweb开发要学习的所有技术和框架总结:

学习javaweb开发要学习的技术和框架总结:前言:当初想学习javaweb开发的时候,希望能够全方面地学习(这样找工作时就胸有成足了)。但是对这个根本不理解,又不认识从事这方面的熟人,所以学习起来无从下手。经…

Java Web实训总结

Jspservletmysql论坛项目实训总结实训人程路峰学号11103303通过为期10天的实训我学习了很多关于JavaWeb的知识在老师的正确指导下顺利的完成了我的实训内容在此也有同学的帮助在他们的帮助下我...

java web 工作原理总结

总结第一章javaweb工作原理11web应用程序有web服务器web客服端浏览器HTTP协议以及静态HTML文件Web服务器的作用是接受客服端请求然后向客服端返回些结果浏览器的作用是允许用户请求服务器上的某个...

JavaWeb学习总结

一基本概念11WEB开发的相关知识WEB在英语中web即表示网页的意思它用于表示Internet主机上供外界访问的资源Internet上供外界访问的Web资源分为1静态web资源如html页面指web页面中供人...

javaWEB开发ssh面试题总结

JavaWEB开发框架面试题tangbi整理题目1Hibernate工作原理及为什么要用原理hibernate通过对jdbc进行封装对java类和关系数据库进行mapping实现了对关系数据库的面向对象方式的操...

webview的使用以及总结(1篇)