在 Xamarin WKWebView 和 UIWebView 之间共享 cookie

Posted

技术标签:

【中文标题】在 Xamarin WKWebView 和 UIWebView 之间共享 cookie【英文标题】:Share cookies between Xamarin WKWebView and UIWebView 【发布时间】:2018-12-27 05:30:41 【问题描述】:

我们知道我们可以在 WKWebViews 之间共享 cookie,正如在 here 和其他讨论中讨论的那样。

但是是否可以在 WKWebView 和 UIWebView 之间共享 cookie?

Http cookie 和其他 cookie。

有人做到了吗?

【问题讨论】:

嘿,问题解决了吗? 我还没试过。 【参考方案1】:

是否可以在 WKWebView 和 UIWebView 之间共享 cookie?

WKWebView cookie 的问题在于 WKWebView 发出的请求不会自动携带存储在 NSHTTPCookieStorage 容器中的 cookie。

解决方案:

WKWebView Cookie注入是通过在执行WKWebView.loadReques()之前将NSHTTPCookieStorage的内容复制到WKHTTPCookieStore中来实现的。示例代码如下:

CopyCookieToWebviewWithHandler(() =>

    NSUrl url = new NSUrl("xxx");
    NSUrlRequest request = NSUrlRequest.FromUrl(url);
    webView.LoadRequest(request);
); 

void CopyCookieToWebviewWithHandler(Action completionHandler)


   NSHttpCookie[] cookies = NSHttpCookieStorage.SharedStorage.Cookies;

   WKHttpCookieStore cookieStore = webView.Configuration.WebsiteDataStore.HttpCookieStore;


   if(cookies.Length==0)
    
        completionHandler();
        return;
    

   foreach (NSHttpCookie cookie in cookies)
    
      cookieStore.SetCookie(cookie,() =>
        
          if(cookies[cookies.Length-1]==cookie)
           
              completionHandler();
              return;
           

        );
     

  

注意:WKHttpCookieStore 仅在 ios 11.0 之后可用

【讨论】:

我已经尝试了所有方法,但并非所有 cookie 都在 wkwebview 中可靠设置。如***.com/a/49534854/1252151 中所述,必须在实例化 wkwebview 之前设置 cookie。我就是不知道怎么办????

以上是关于在 Xamarin WKWebView 和 UIWebView 之间共享 cookie的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Xamarin IOS 中捕获 WkWebView 的屏幕

iOS 让 WKWebView 支持 NSURLProtocol

Xamarin iOS WKWebView 不显示谷歌recaptcha

WKWebView CanPerform 上的 Xamarin iOS 死锁

Xamarin iOS WKWebView 显示 JavaScript 警报

UIWebView 和 URLRequest 拦截