http://blog.csdn.net/baihuaxiu123/article/details/51286109
http://methodname.com/jin-jie-pian-iosshi-yong-wkwebviewhun-bian-kai-fa/
http://blog.sina.com.cn/s/blog_c4fb92f60102w65o.html
http://www.bkjia.com/IOSjc/1087722.html 点击图片
https://my.oschina.net/linxiaoxi1993/blog/465905?p={{page}}
http://www.cnblogs.com/shensq/p/5848668.html (js webview)
http://www.cnblogs.com/shaoting/p/5247208.html ios javascriptcore.framework使用
http://www.cnblogs.com/Hakim/p/5885252.html
http://blog.csdn.net/msmwncx/article/details/50381598 URL从新定向
http://www.cocoachina.com/ios/20150626/12161.html
http://mobile.51cto.com/iphone-481490.htm 缓存
http://devonios.com/intercept-302-request.html 拦截
点击返回打印
http://blog.sina.com.cn/s/blog_b8e97683010183lz.html
http://www.360doc.com/content/14/0806/18/11684414_399908679.shtml 进度条
http://blog.csdn.net/y550918116j/article/details/49684127
http://blog.csdn.net/chromium_webkit/article/details/8631867
///
SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
///
ios webveiw 报错Error Domain=NSURLErrorDomain Code=-999 "(null)" UserInfo={NSErrorFailingURLStringKey=http://192.168.1.85:8088/coolwin_dat/ptpDetail.do?productId=100147, NSErrorFailingURLKey=http://192.168.1.85:8088/coolwin_dat/ptpDetail.do?productId=100
请求以前先停止请求.
http://blog.csdn.net/hursing/article/details/8771847 webview的概论
User-Agent = %E9%85%B7%E7%9B%88%E7%BD%91/4.23 CFNetwork/758.3.15 Darwin/15.6.0 服务端为什么会接受到这种User-Agent
15、在使用webView进行新浪微博分享时,webView会自动保存登陆的cookie导致项目中的分享模块有些问题,删除 webView的cookie的方法:
-(void)deleteCookieForDominPathStr:(NSString *)thePath
{
//删除本地cookie,thePath为cookie路径通过打印cookie可知道其路径
for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
if([[cookie domain] isEqualToString:thePath]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
}
文/学无止境666(简书作者)
原文链接:http://www.jianshu.com/p/3d7e4804033b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
这个标题已经起了好久,但是好久没有想好咋么动手写.真好前段时间用到了这方面.就从我的角度来讲一下
需求: iOS原声页面加载H5页面,但是,没加载一个页面时要在相应的URL后面拼接一个token 服务器用来区分是wap端请求还是APP段请求.然后返回相应的界面.
当我听到这个需求时,我的内心是窃喜的.我想这岂不是超级简单,然而我没想的是这就是我入坑的第一步.\(o)/~
我的思路: 控制器VC,上面添加一个webveiw,然后[webveiw loadrequest:request];
准代理并且在这个代理方法
- - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if (![request.URL.absoluteString isEqualToString:@"http://baidu.com"]) {
NSURL * url = [NSURL URLWithString:@"http://baidu.com?token="];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
return NO;
}
return YES; }
实现URl修改,对就是这样.按照最开始的思路来看,就这么简单搞定啦.但是那因为我们不了解webview的运行机制.
可以看一下,当我们试图加载一个网页时,webveiw的代理执行了几次,2次.
=那么问题来了,URL会对服务器请求几次啊.当然是两次.问题来啦:如果你的领导知道这个他们会怎样,干掉你
那我们再想一下为什么会请求两次呢
断断续续,好久了这片始终没找到好的切入点,感觉webveiw使用很简单,但是深入的资料很难查到,百度一搜,全部都是一样的表面使用.
后来想了好多办法用来防止两次请求,但是都失败.于是就想到了nsurlprotocol,想到了他,于是使用他,但是wkwebveiw,不支持nsurlprotocol,然后呢我又找到了兼容办法,就是调用私有接口(连接在上面),以为万事大吉啦,但是发现,他无法加载post,因为post的请求体无法发送到服务器,于是乎,数据显示不全.我就想,那就把post的请请求不让他执行nsurlprotocol,但是发现不好使.这时候呢,我就想那就用webveiw吧,耗内存,久耗内存吧,然后全部换成webveiw,这时候呢,除去post,以后还有页面请求URL,还有一些其他数据请求URL.我把全部数据打印了一下,发现有用的数据都含有一个.do.于是有用.do筛选一遍.这样呢,就可以在协议里面进行request重定向.对这些URL进行拼接参数.后来又发现问题,就是异步在这种请求下不好使,于是乎,又不能使用拼接参数.
接着能又换了方法,用cookie判断这样,就搞定啦
当然,还有就是这里面需要在nsurlprotocol中对vc进行从操作,使用的是通知中心的模式,而且注意是要在主线程发送通知.
还有就是在surlprotol中跳转原声界面也要在主线程中跳转,尤其是在页面使用了masary布局时,不然会报错.
目前这种靠拦截的做法是比较落后的,个人赶脚,也因为个人平时使用webview比较少,所以遇到很多坑
个人感觉对webveiw的深入理解还是少很多.
当然期间也遇到了很多问题,就是使用kvc修改webveiw的request属性,使用kvo监听request,同样也失败了,不知道是什么原因(求大神解释)
webview goback 刷新 正常情况下他是不支持返回刷新的,通过下面方法可以实现
id webView = [self.webview valueForKeyPath:@"_internal.browserView._webView"];
id preferences = [webView valueForKey:@"preferences"];
[preferences performSelector:@selector(_postCacheModelChangedNotification)];