2017-04-01 21 views
0

すべてのCookieを取得するために、WKWebView CookieをUIWebViewと共有しようとしています。 UIWebViewからすべてのクッキーをWKWebViewと比較して取得するのは非常に簡単です。UIWebViewでWKWebView Cookieを共有する

タブ付きアプリケーションテンプレートで2つのWebView(WKWebView、UIWebView)を作成します。私はUIWebViewでWKWebViewクッキーを共有するために使用していますが、成功しませんでしたメソッドの下に。私はWKWebViewから自分のアカウントにログインしたときに、コードの上に使用

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { 

    let response = navigationResponse.response as? HTTPURLResponse 
    let cookies = HTTPCookie.cookies(withResponseHeaderFields: response?.allHeaderFields as! [String : String], for: (response?.url)!) 

    HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always 

    for cookie in cookies { 
    HTTPCookieStorage.shared.setCookie(cookie) 
    } 

    decisionHandler(WKNavigationResponsePolicy.allow); 
} 

、のUIWebViewはすでに私にログインしていませんでした。 また、WKWebViewでUIWebView Cookiesを共有しようとしましたが、うまくいきました。

私はどのように私はWKWebViewクッキーを共有することができます教えてくださいUIWebViewまたはどのように私はWKWebViewからすべてのクッキーを得ることができますか?あなたは初期設定で

最初に以下の手順でwkwebviewクッキーを設定する必要が

おかげ

答えて

0

はクッキーを設定するためのスクリプトを実行することです:手動で、その後

-(void)initWebView 
{ 
    WKWebViewConfiguration *webViewconfiguration = [[WKWebViewConfiguration alloc] init]; 
    WKUserContentController *wkUController = [[WKUserContentController alloc] init]; 
    if(URL.host hasSuffix:baseDomain){ 
    //Here to determine whether the domain name is their own website 
     NSString *jScript = [self setCookies]; 
     WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]; 
        [wkUController addUserScript:wkUScript]; 
} 
    webViewconfiguration.userContentController = wkUController; 
    WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, width, height) configuration:webViewconfiguration]; 
} 
//The script that executes may be slightly different 
+(NSString *)setCookies 
{ 
    NSString *script = [NSString string]; 

    for (NSHTTPCookie *httpCookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) 
    { 
     NSString *cookie = [NSString stringWithFormat:@"%@=%@;domain=%@;path=%@",httpCookie.name,httpCookie.value,httpCookie.domain,httpCookie.path?:@"/"]; 
     script = [script stringByAppendingString:[NSString stringWithFormat:@"document.cookie='%@';",cookie]]; 

    } 
    return script; 
} 

そして追加しますCookieをNSURLRequestオブジェクトの作成時にHTTPヘッダーに追加します。

- (void)loadRequest:(NSURLRequest *)request 
{ 
    //Here to determine whether the domain name is their own website 
    if ([request.URL.host hasSuffix:baseDomain]){ 
     NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:request.URL]; 
     NSString *cookies = @""; //setting Cookies 
     [mutableRequest addValue:cookies forHTTPHeaderField:@"Cookie"]; 
} 
    // do request 
} 
関連する問題