WKWebView遇到的问题

参考链接:

http://www.jianshu.com/p/403853b63537

http://www.jianshu.com/p/186a3b236bc9

1. 用WKwebView时,怎么通过post传数据给服务器

当我们用UIWebView时,如果要post数据给服务器,那代码很简单,如下

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:Message_Login_path]];

[request setHTTPMethod:@"POST"];

[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];

[weakSelf.webView loadRequest:request];

但是我们用WKWebView时,再通过上面的代码就无法将参数传过去,网上找到了一种方法

1.创建JSPOST.html文件,把下列代码复制过去

2.将对应的JavaScript代码通过加载本地网页的形式加载到WKWebView(我是在登录时需要post数据过去验证,所以,下面的代码是在将要push到登录页面前,加载js)

// 获取JS所在的路径

NSString *path = [[NSBundle mainBundle] pathForResource:@"JSPOST" ofType:@"html"];

// 获得html内容

NSString *htmlJS = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

// 加载js

[self.wkWebView loadHTMLString:htmlJS baseURL:nil];

// JS发送POST的Flag,为真的时候会调用JS的POST方法

self.needLoadJSPOST = YES;

3.post提交数据并更改self.needLoadJSPOST=NO,避免重复调用。

//post的数据,注意数据格式(可以将上面的JSPOST.html里的代码给服务器人员,确定下要传过去的格式是什么样的,并且确定服务器那边是否需要特殊处理这些数据)

NSString *postData = self.wkPostData;

//post的路径

NSString *urlStr = Message_Login_path;

NSString *jscript = [NSString stringWithFormat:@"post('%@', %@);",urlStr,postData];

[self.wkWebView evaluateJavaScript:jscript completionHandler:^(id _Nullable object, NSError * _Nullable error) {

self.wkPostData = nil;

NSLog(@"%@",object);

NSLog(@"error=%@",error);

}];


2.wkwebview加载h5要调用电话功能和APPStore

UIWebview 调用电话或者APPStore无需做其他处理,但是WKWebVIew不做处理就不可以

//调用电话

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler

{

NSURL *url = navigationAction.request.URL;

if ([url.scheme isEqualToString:@"tel"]) {

UIApplication *app = [UIApplication sharedApplication];

if ([app canOpenURL:url]) {

[app openURL:url];

decisionHandler(WKNavigationActionPolicyCancel);

return;

}

}

}

//APPStore

if ([url.absoluteString containsString:@"itunes.apple.com"]) {

if ([app canOpenURL:url])

{

[app openURL:url];

decisionHandler(WKNavigationActionPolicyCancel);

}

}

3.清理缓存

由于修改默写页面的数据时,需要回调到先前的某些来显示,这时由于缓存存在,导致显示的页面里还是显示前些的数据,无法更新到最新的H5页面。可以通过清理缓存来实现获取最新的H5页面

UIWebView清理缓存:

通过调用一下代码就可以清理缓存

[[NSURLCache sharedURLCache] removeAllCachedResponses];

我们想清理缓存更新H5页面,仅仅是想清除某个H5页面缓存,先前有试过针对某个页面进行清除,但是一直不成功,无奈只能清除所有的内存来达到目的。

WKWebView清理缓存:

WkWebView是IOS8出现的,但不是很完善,例如设置Agent的customUserAgent属性和清理缓存的方法等等都是IOS9才出现的,因为项目中有用到,所以我是适配IOS9才用wkwebview。

网上清理缓存的方法是

NSSet *websiteDataTypes

= [NSSet setWithArray:@[

WKWebsiteDataTypeDiskCache,

WKWebsiteDataTypeMemoryCache

]];

NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];

// Execute

[[WKWebsiteDataStore defaultDataStore] removeDataOf  Types:websiteDataTypes  modifiedSince:dateFrom completionHandler:^{

}];

其中websiteDataTypes存放的是要清除的类型,也可以通过 NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];清除全部的缓存类型。

通过这个方法我百试百错, 我先前一直是放在- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 中执行。后来改成放在

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation 中就成功了 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    CoderLF阅读 8,856评论 2 12
  • iOS 的 Cookie 存取 https://juejin.im/entry/58d4c4cc44d904006...
    Farmers阅读 5,748评论 0 16
  • WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨...
    Aiana阅读 4,476评论 1 8
  • 转载:http://www.cnblogs.com/NSong/p/6489802.html 导语 WKWebVi...
    李小威阅读 4,784评论 8 9
  • 写给苏志燮的信之二亲爱的苏苏,今天早醒, 望着窗外微雨的天空发呆,不愿起床,就这样任想你的思绪在空气里游荡,一点点...
    卿云lusindaen阅读 1,071评论 0 2