
iOS WKWebView兼容实战篇
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本文详细介绍了如何在iOS开发中使用WKWebView,并提供了针对不同版本和需求的实际解决方案与代码示例。适合中级开发者阅读。
iOS WKWebView适配实战篇主要介绍了WKWebView在实际应用中的配置方法,并通过示例代码详细解释了相关知识点,对学习或工作有一定的参考价值。
1. Cookie同步问题
由于WKWebView使用独立存储控件,与传统的UIWebView不互通。从iOS 11开始,苹果开放了WKHTTPCookieStore接口供开发者进行cookie同步处理。然而,在低版本的系统中仍需寻找其他方法来实现这一功能。文中详细讨论了如何利用WKHTTPCookieStore和NSHTTPCookieStorage遍历设置的方法来进行cookie同步。
2. 同步cookie(从NSHTTPCookieStorage到WKHTTPCookieStore)
在iOS 11及以上版本,开发者可以直接使用WKHTTPCookieStore进行cookie的同步操作。文章中提供了详细的示例代码来展示如何实现这一过程:
```objectivec
- (void)syncCookiesToWKCookieStore:(WKHTTPCookieStore *)cookieStore API_AVAILABLE(ios(11.0)) {
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
if (cookies.count == 0) return;
for (NSHTTPCookie *cookie in cookies) {
[cookieStore setCookie:cookie completionHandler:^{
if ([cookies.lastObject isEqual:cookie]) {
[self wkwebviewSetCookieSuccess];
}
}];
}
}
```
3. WKWebView初始化时同步cookie
文中还探讨了在WKWebView初始化阶段进行cookie同步的重要性,确保页面请求能够携带正确的认证信息。
4. 在iOS 11及以下版本中前端执行JS注入cookie
对于低于iOS 11的系统环境,可以通过JavaScript脚本向WKWebView注入cookies。文章提供了如何使用WKUserScript来实现这一功能的具体代码示例:
```objectivec
- (void)injectCookiesLT11 {
WKUserScript *cookieScript = [[WKUserScript alloc] initWithSource:[self cookieString] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
[self.wkWebView.configuration.userContentController addUserScript:cookieScript];
}
- (NSString *)cookieString {
NSMutableString *script = [NSMutableString string];
[script appendString:@var cookieNames = document.cookie.split(; ).map(function(cookie) { return cookie.split(=)[0] } );n];
for (NSHTTPCookie *cookie in NSHTTPCookieStorage.sharedHTTPCookieStorage.cookies) {
Skip cookies that will break our script
if ([cookie.value rangeOfString:@].location != NSNotFound) {
continue;
}
[script appendFormat:@if (cookieNames.indexOf(%@) == -1) { document.cookie=%@; };n, cookie.name, [self formatCookie:cookie]];
}
return script;
}
```
综上所述,WKWebView适配实战篇深入探讨了WKWebView的Cookies同步问题,并提供了详尽的操作示例代码,帮助开发者更好地理解其工作原理并解决相关配置难题。
全部评论 (0)


