iOS - UIWebView相关

Url编码

当url地址中包含有中文字符或其他非标准的url字符时,需要对该url地址进行编码,否则直接使用的话,会报错。NSString提供编码和解码方法:

编码:stringByAddingPercentEscapesUsingEncoding

解码:stringByReplacingPercentEscapesUsingEncoding

NSString *urlString=[NSString stringWithFormat:@"http://www.xxxx.com/?param=%@",@"中文"];

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

编码后就可以使用UIWebView加载urlString。

UIWebView加载数据3种方法

1.- (void)loadRequest:(NSURLRequest *)request;

    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];

直接加载url地址。

2.- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;

如果获取到的是HTML字符串,可以用这个方法加载。

3.- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

    NSURL *url = [NSURL URLWithString:urlString];
    NSData *data=[NSData dataWithContentsOfURL:url];
    [self.webView loadData:data MIMEType:@"text/html" textEncodingName:@"GBK" baseURL:nil];

编码格式有GB2312、GBK、UTF-8等许多种,当url地址的编码格式比较特殊时,可以用这个方法加载。

WebVIew高度自适应

1.实现下面的事件方法便能使WebView自适应大小:

遵守协议UIWebViewDelegate,设置代理self.webView.delegate=self;

实现- (void)webViewDidFinishLoad:(UIWebView *)webView事件方法

- (void)webViewDidFinishLoad:(UIWebView *)webView     //网页加载完成的时候调用
{  
    CGRect frame = webView.frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;
}

此方法得到的webView自适应的高度是固定的,如果显示的HTML的高度超过webView的高度,则以屏幕滚动的方式显示。

2.如果想让webView的高度等于显示的HTML的实际高度,即显示的HTML有多高,webVIew的高度就有多高,则使用以下方法:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] integerValue];
    self.webView.frame=CGRectMake(0, 0, self.view.frame.size.width,height);
}

虽然这个方法能使webView高度为显示的HTML实际高度,但效果并不是太好,当高度超出屏幕时,无法滚动下拉。

3.若要在webVIew的高度为实际HTML的高度的情况下实现滚动,可综合两种方法,将webView置于一个足够大的scrollView上,即可实现:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    CGRect frame = webView.frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;

    NSInteger height = [[webView stringByEvaluatingJavaScriptFromString:
    @"document.body.scrollHeight"] integerValue];
    
    self.scrollView.contentSize=CGSizeMake(self.view.frame.size.width, height);

    [self.scrollView addSubview:self.webView];
}

另,以下三段代码效果基本相同:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"];

[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"];

[webView stringByEvaluatingJavaScriptFromString:@"document.body.clientHeight"];

时间: 2024-11-15 10:35:47

iOS - UIWebView相关的相关文章

iOS UIWebView与JavaScript的交互 相关资料

UIWebView自适应宽度 iOS UIWebView中javascript与Objective-C交互.获取摄像头 iOS中JavaScript和OC交互 iOS与js交互,获取webview完整url,title,获取元素并赋值跳转 示例 https://github.com/shaojiankui/WebViewJS wanggang316/ClickWebViewImage 点击webview上的图片,调用js获取,展示,保存

iOS UIWebView 通过 cookie 完成自动登录验证

一些说明: 通过UIWebView登录后,会自动得到web服务器设置的cookie包括服务器中的seesionid. cookie不会自动保存在app里面,需要通过设置才能在下次启动app时获取. 自动登录,需要设置header,才能将cookie带给web服务器. 自动登录,需要web服务器端进行cookie验证方可登录. 实现流程: 1. 做好Sign in页面后,通过get或post递交表单给web服务器,可以通过下面的代码遍历得到的cookie. NSHTTPCookieStorage

ios UIWebView 加载网页、文件、 html

UIWebView  是用来加载加载网页数据的一个框.UIWebView可以用来加载pdf word doc 等等文件 生成webview 有两种方法,1.通过storyboard 拖拽 2.通过alloc init 来初始化 创建webview,下列文本中 _webView.dataDetectorTypes = UIDataDetectorTypeAll; 是识别webview中的类型,例如 当webview中有电话号码,点击号码就能直接打电话 - (UIWebView *)webView

iOS UIWebView 加载https站点出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,

今天在加载https站点的时候遇到如下的错误问题.所以对自己之前写的iOS内嵌webview做了一些修改,可以让它加载http站点也可以让它加载https站点. 下面是我加载https站点的时候出现的错误. error:     NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) HTTPS 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protoc

ios UITableView 相关

tableView 实现的方法 无分组的cell #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.contacts.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRow

iOS UIWebView截获html并修改便签内容

UIWebView使用中经常遇到用JS来处理的事情,今天又遇到了搜了搜,找了这篇文章 感觉不错 珍藏一下. 原文地址 http://jiapumin.iteye.com/blog/1558345    感谢原作者jiapumin 需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端html <html><head> <meta h

IOS UIWebView截获html并修改便签内容,宽度自适应

需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果:  方法:通过js截获UIWebView中的html,然后修改html标签内容:  实例代码:  服务器端html Java代码   <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="

iOS网络相关知识总结

iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Request的URL, HTTPMethod, HTTPHeader, HTTPBody等信息.一般发请求尽量不要使用NSURLRequest,因为它不能设置请求方式.请求超时等(总之什么都不能设置).通常发请求都使用NSMutableURLRequest,可以进行更多的设置. 补充1:因为NSURL不支持

ios UIWebView 播放优酷土豆视频

将下面的代码嵌套在html里,然后webView加载这个网页.或这段html码,就行了,无需要使用像网上说的html5去兼容 ios UIWebView 播放优酷土豆视频