我们的客户要求我们最近从WebView切换到WKWebView。他们的应用程序使用本机登录,这是通过对其后端进行2次POST调用来完成的,返回各种授权cookie,这些授权cookie随后将在整个应用程序的每个HTTP / AJAX调用中使用。
借助WebView,所有功能都可以像魅力一样工作,而无需实现一行定制代码。用户登录后,默认情况下cookie被存储到cookie存储中,并且WebView始终从那里获取并使用它们,因为HTTPURLCookieStorage在NSURLSession和WebView之间共享。
使用WKWebView,这是一个全新的故事。将WebView切换到WKWebView之后,我们看到授权不起作用。这是由于在WKWebView中丢失了一些cookie。我们现在存储来自NSURLSession响应的cookie,并通过在HTTP请求中添加“ Cookie”标头来将它们手动附加到WKWebView。
我们能够以这种方式获得HTTP调用的授权,但是现在我们看到了一个新问题。不知何故,在WKWebView中完成的所有AJAX调用都会丢失授权cookie。
您是否可以通过某种方式使授权cookie出现在AJAX调用中,您是否知道?注入javascript与
javascriptCookieString = @"document.cookie = 'testCookie=testValue';";
[self.webView evaluateJavaScript:javascriptCookieString completionHandler:nil];
无效,并且似乎无法控制Javascript调用,因此我无法在执行请求之前更改请求。谢谢你。
我发现以下代码片段对我们有用。我们有同样的问题。
// add session cookie to ajax calls
WKUserContentController* userContentController =
WKUserContentController.new;
WKUserScript * cookieScript =
[[WKUserScript alloc]
initWithSource: [[User sharedInstance] getJavscriptCookieString]
injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
[userContentController addUserScript:cookieScript];
WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
webViewConfiguration.userContentController = userContentController;
webViewConfiguration.preferences.javaScriptCanOpenWindowsAutomatically = true;
_wk = [[WKWebView alloc] initWithFrame:self.view.frame configuration:webViewConfiguration];
Cookie字符串需要正确设置格式才能被接受。
-(NSString*) getJavscriptCookieString {
return [NSString stringWithFormat: @"document.cookie = '%@=%@'", [self getSessionName], [self getSessionValue]];
}
希望这可以有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句