42- WKWebView项目实践分享(七) - 补充: 实践中的坑

系列文章:

第一坑: WKProcessPool

知识点复习:

看过腾讯Bugly的那篇 《WKWebView 那些坑》,我们知道WKProcessPool可以解决不同的WKWebView 之间共享 Cookie(session Cookie and persistent Cookie)数据, 具体的做法是创建一个单利,来持有WKProcessPool。
场景:在H5中点击一些链接,它是会在当前的webView基础上,重新创建一个webView来展示的,而不是在当前webView上展示。 具体创建方式就是回调在第二章中执行WKUIDelegate的代理方法。
解决这一个问题的方式,具体代码如下:

    WKWebViewConfiguration * webConfiguration = [[WKWebViewConfiguration alloc]init];
webConfiguration.processPool = [LLWKProcessPoolUtil sharedInstance].wkProcessPool;
    @interface LLWKProcessPoolUtil : NSObject

        + (LLWKProcessPoolUtil *)sharedInstance;
        
        /// WKProcessPool
        @property (nonatomic, strong) WKProcessPool *wkProcessPool;
        
        /// 销毁wkProcessPool单例属性
        - (void)destroyInstance;

    @end


#import "LLWKProcessPoolUtil.h"

@implementation LLWKProcessPoolUtil

+ (LLWKProcessPoolUtil *)sharedInstance
{
    static dispatch_once_t once;
    static YCWKProcessPoolUtil * __singleton__;
    dispatch_once( &once, ^{
        __singleton__ = [[LLWKProcessPoolUtil alloc] init];
    });
    return __singleton__;
}


#pragma mark - 不同webView中的Cookie
static WKProcessPool *__singlePool__ = nil;
static dispatch_once_t onceTokenPool;
- (WKProcessPool *)wkProcessPool
{
    dispatch_once( &onceTokenPool, ^{
        __singlePool__ = [[WKProcessPool alloc] init];
    });
    return __singlePool__;
}

- (void)destroyInstance
{
    onceTokenPool = 0;
    __singlePool__ =nil;
}

@end
遇到的坑:

这样虽然可以解决创新创建的WKWebView的cookie访问问题,但是因为是单利持有的,当我们切换用户登录之后,webView会出现带有上一个用户Cookie的问题,这对于设计到积分和金钱的业务就很麻烦了,H5以为是上一个用户登录的。 解决方法, 切换登录的时候,将单利持有的proceressPool销毁掉,代码如下:

[LLWKProcessPoolUtil destroyInstance];

但是这样,我们会有另外一个问题,发生在iOS8~iOS10,proceressPool销毁之后进入再次进入webView进行登录,按照我们第四章中的Cookie策略,Cookie死活没有了。 比如得重新重新走一遍创建WKWebView,然后请求url的步骤才能生效。 好吧,原因是这个时候,document.Cookie也随之丢失了。

解决办法:

解决方法,你也想到了,重新给document.Cookie赋值。

第二坑:User Agent

知识点复习:

我们加User Agent,就是方便H5后台知道,这个H5页面是从咱公司APP进去的。方便识别来源,做大数据和广告数据统计。

遇到的坑:

之前的写法,是直接股改webView原生的User Agent。后来上线过程中,遇到一个广告客户的H5链接怎么都打不开,一直在重定向循环。
但是我们新建一个纯净WKWebView是可以正常打开的。经过仔细排查,才发现是User Agent的锅。有些H5的后台是根据设备浏览器上传的User Agent来判断设备的webView是否安全或者是否可以让该webView打开网页。很显然,他们是根据webView原生的来判定的。

解决办法:

设置的时候不要覆盖手机原生User Agent, 我们要把我们自己公司的自定义User Agent字段追加到原生后边。也就是『原生User-Agent + 我们自己的User Agent』。比如:

Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko)   Mobile/16B91   LiLong=123445   LiLongBBB=Baidu

第三坑:后台H5页面不支持https://

遇到的坑:

最新测试反馈一个H5页面有问题, 具体是在iOS上某些点击不跳转. 开始以为是webView的问题, 新建项目加载这个链接也有问题. 并且在mac电脑的浏览器上也有相同问题. 但是同事打开就没问题. 奇怪了. 都是mac电脑, 都是一个浏览器. 难道是链接的锅? 后来发现还真是, 我这边加载的"https://xxxxxxxx", 同事加载的是"http://xxxxxxxx". "https://xxxxxxxx"这个有问题.

解决办法:

通知H5, iOS加载"http://xxxxxxxx"

第四坑:Request Header中写入自定义Host导致请求个别网页失败

遇到的坑:

上一个离职的同事在写webView请求的时,手动在Request Header中设置了一次Host,这么做的原因不太清楚,可能是因为服务器识别请求来源。之后很长时间里也没有问题,但是前段时间有一天请求某个webView总是白屏,经过排除法,最终确定是因为重写了Host。代码中设置Host的方法是这样的:

    [request addValue:request.URL.host forHTTPHeaderField:@"Host"];
解决办法:

不手动在Request Header设置了一遍Host,删除这一行代码。

交流


希望能和大家交流技术
Blog:http://www.lilongcnc.cc


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

推荐阅读更多精彩内容

  • 导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit...
    Jecky丶阅读 7,784评论 2 22
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,036评论 1 32
  • 1、WKWebView 白屏问题WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebV...
    无名感恩阅读 2,100评论 0 3
  • 1、WKWebView 白屏问题WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebV...
    iosRn阅读 2,065评论 1 10
  • 转载链接:腾讯Bugly 导语 WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView ...
    Jelly_沫阅读 2,799评论 0 3