两个单独的 cookie 存储(UIWebView 或 WKWebView) [英] Separate cookie storage for two (UIWebView or 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屋!