两个单独的 cookie 存储(UIWebView 或 WKWebView) [英] Separate cookie storage for two (UIWebView or WKWebView)

查看:24
本文介绍了两个单独的 cookie 存储(UIWebView 或 WKWebView)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在不同的 webView 中登录同一站点的多个帐户.例如,我的 Tab Bar Controller 包含三个 view controllers 并且每个 view controllers 包含 webView.例如,我在每个类中为 webView 嵌入了 stackoverflow url.用户如何使用这三个 webView 同时登录不同的帐户?我已经尝试过了,但我一次只能登录一个用户.我发现我需要为每个 UIWebView 创建单独的 cookie,但大多数答案都在 Objective-c 中,而不是我想要的正确答案.例如(

解决方案

您可以通过使用 WKWebSiteDataStore 的不同实例来使用 WKWebView 来做到这一点:

让配置1 = WKWebViewConfiguration()configuration1.websiteDataStore = WKWebsiteDataStore.nonPersistent()self.webView1 = WKWebView(frame: CGRect.zero, configuration: configuration1)self.view.addSubview(self.webView1)让配置2 = WKWebViewConfiguration()configuration2.websiteDataStore = WKWebsiteDataStore.nonPersistent()self.webView2 = WKWebView(frame: CGRect.zero, configuration: configuration2)

不幸的是,应用重启后你会丢失 webView 数据(如 cookie、缓存等),因为非持久性 WKWebsiteDataStore 无法保存到磁盘(您会注意到 WKWebsiteDataStore 实现了 NSCoding,但它不适用于非持久性存储).

I want to login many accounts of same site in different webView. For example i have Tab Bar Controller that contains three view controllers and each view controllers contain webView. And for example i embed stackoverflow url for webView in every class. How user can login to different accounts at the same time using these three webView? I've tried this but i can just login one user at a time. I have found that i need to create separate cookie for every UIWebView, but mostly answers are in objective-c and not the proper answer i want. For example (First Second Third) Can any one please tell me how i can do it?

class FirstViewController: UIViewController , UIWebViewDelegate{

    @IBOutlet weak var webView: UIWebView!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!

    override func viewDidLoad() {
        webView.delegate = self
        let requestURL = NSURL(string: "http://stackoverflow.com")
        let request = NSURLRequest(URL: requestURL!)
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()
        webView.loadRequest(request)

    }
       func webViewDidFinishLoad(webView: UIWebView) {
        activityIndicator.stopAnimating()
    }

}

class SecondViewController: UIViewController, UIWebViewDelegate{

    @IBOutlet weak var webView: UIWebView!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!

    override func viewDidLoad() {
        webView.delegate = self
        let requestURL = NSURL(string: "http://stackoverflow.com")
        let request = NSURLRequest(URL: requestURL!)
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()
        webView.loadRequest(request)

    }
        func webViewDidFinishLoad(webView: UIWebView) {
        activityIndicator.stopAnimating()
    }


}

Thanks

解决方案

You can do this with WKWebView by using different instances of WKWebSiteDataStore:

let configuration1 = WKWebViewConfiguration()
configuration1.websiteDataStore = WKWebsiteDataStore.nonPersistent()
self.webView1 = WKWebView(frame: CGRect.zero, configuration: configuration1)
self.view.addSubview(self.webView1)

let configuration2 = WKWebViewConfiguration()
configuration2.websiteDataStore = WKWebsiteDataStore.nonPersistent()
self.webView2 = WKWebView(frame: CGRect.zero, configuration: configuration2)

Unfortunately, you will loose webView data (such as cookies, cache, etc) after app restart, because non-persistent WKWebsiteDataStore can't be saved to disk (you could notice that WKWebsiteDataStore implements NSCoding, but it doesn't work for non-persistent stores).

这篇关于两个单独的 cookie 存储(UIWebView 或 WKWebView)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆