webViewDidFinishLoad 执行多次的问题
在做网页加载进度条的时候,发现UIWebViewDelegate中webViewDidFinishLoad方法会执行多次:
- (void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"start******");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"end....");
}
查阅网上资料,说网页内有异步请求或者重定向时,就会多次调用上述方法,然后证实异步请求是不是有这种情况:
例子中加载本地html文件,用js模拟异步请求:
加载本地html:
NSString * path = [[NSBundle mainBundle] pathForResource:@"demo11" ofType:@"html"];
NSString * HTMLString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[self.webView1 loadHTMLString:HTMLString baseURL:nil];
js代码:
var xhr = new XMLHttpRequest();
xhr.open("GET","http://localhost:8080/myweb1/testserlet",true);
xhr.send("name");
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
alert("success!");
}else{
alert("failed"+xhr.status);
} }
}
发现webViewDidFinishLoad并没有多次执行,那么剩下的原因就是网页的重定向。
解决办法是用webView.isLoading属性:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (webView.isLoading) {
return;
}
//code...
}
这样每进入一个新的网页,webViewDidFinishLoad只执行一次。
或者折中方法,让次方法只执行一次的话(不管网页的跳转):
定义一个属性:@property(nonatomic) BOOL isFirstLoadWeb;
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (!self.isFirstLoadWeb) {
self.isFirstLoadWeb = YES;
}else
return;
//code...
}
先这样吧,如果有理解错误的,后边再改。。。
webViewDidFinishLoad 执行多次的问题的更多相关文章
- iOS HTML图片本地预览
引言 相信用过苹果手机的童鞋,会发现很多新闻类的应用,都可以实现HTML图片本地预览,那么这是如何实现的呢?本文将深入阐述其中的原理. 关于此功能,我还实现了一个DEMO,大家可以点击此访问更详细内容 ...
- Bash 翻译
Bash参考手册 目录 1简介 1.1什么是Bash? 1.2什么是shell? 2定义 3基本外壳功能 3.1 Shell语法 3.1.1外壳操作 3.1.2报价 3.1.2.1逃逸角色 3.1.2 ...
- [iOS Hybrid实践:UIWebView中Html中用JS调用OC方法,OC执行JS代码]
原理: 1.JS调用OC 每次webview执行跳转时都会被iOS给拦截,执行下面函数获得系统允许. 因此可以根据跳转信息转给系统,执行相应功能,比如打开相册等. // 网页中的每一个请求都会被触发 ...
- iOS UIWebView和网页的交互(OC中调执行JS)
UIWebView和网页的交互(OC中调执行JS)- (void)viewDidLoad{[super viewDidLoad];// 1.webViewUIWebView *webView = [[ ...
- iOS中UIWebView执行JS代码(UIWebView)
iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被 ...
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- nohup程序后台执行
Linux常用命令,用于不挂断的执行程序. nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- 深入理解JS 执行细节
javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等 ...
随机推荐
- cloudera安装hadoop集群和相关服务
一.软件准备: 1.下载cloudera-manager-installer.bin(安装...-server),cdh4.cm(这是...-agent),另外还有些需要的关联软件下步添加. 2.先建 ...
- rt: Unknown command 'PATH='
- web页面布局思想
一.盒子模型 网页可以看成由一个个"盒子"组成,如图: 由上图可以看出,页面分为上(网站导航).中.下(版权声明)三个部分,中间部分又分为左(商品分类).中(主要部分).右,这些版 ...
- 《A First Course in Probability》-chape1-组合分析-二项式定理
二项式系数的概念给人最直观的概念就是,这里有n个物品,分成两组,其中一组的数量是i的所有组合情况. 它的证明过程既可以从组合分析的角度,也可以从数学归纳的角度,由于数学归纳涉及到计算比较困难,我们这里 ...
- Java 集合框架 LinkedHashSet 和 LinkedHashMap 源码剖析
总体介绍 如果你已看过前面关于HashSet和HashMap,以及TreeSet和TreeMap的讲解,一定能够想到本文将要讲解的LinkedHashSet和LinkedHashMap其实也是一回事. ...
- GitHub上整理的一些资料(转)
技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...
- Oracle索引(B*tree与Bitmap)的学习总结
在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等,其中最常用的是B*Tree索引和Bitmap索引.(1).与索引相关视 ...
- wmic
前沿:WMIC命令在我们的工作中可以帮助我们减少对其他工具的依赖并节省我们的时间,实在是一个值得学习和研究的好东西 命令很多,这里我把网上目前能找到的较实用的一些命令整理出来,希望各位看官能找到自己需 ...
- java 新手
public class hello{ public static void main(String args[]){ int a=23,b=32,c=34; int s=Math.max(a,c); ...
- CCHttpClient发起https请求
游戏中用http post请求和服务器交互,随便一抓包就暴露了提交的数据,太不靠谱,决定对游戏中一些敏感数据使用https协议,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网 ...