两个单独的 cookie 存储(UIWebView 或 WKWebView)
Separate cookie storage for two (UIWebView or WKWebView)
我想在不同 webView
中登录同一站点的多个帐户。例如,我有 Tab Bar Controller
包含三个 视图控制器 ,每个 视图控制器 包含 webView
。例如,我在每个 class 中嵌入 Whosebug
url for webView
。用户如何使用这三个 webView
同时登录不同的帐户?我已经试过了,但我一次只能登录一个用户。
我发现我需要为每个 UIWebView
创建单独的 cookie
,但大多数答案都在 objective-c 中,而不是我想要的正确答案。例如 (First Third)
谁能告诉我该怎么做?
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://whosebug.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://whosebug.com")
let request = NSURLRequest(URL: requestURL!)
activityIndicator.hidesWhenStopped = true
activityIndicator.startAnimating()
webView.loadRequest(request)
}
func webViewDidFinishLoad(webView: UIWebView) {
activityIndicator.stopAnimating()
}
}
谢谢
您可以通过使用 WKWebSiteDataStore
的不同实例对 WKWebView
执行此操作:
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)
不幸的是,您将在应用重启后丢失 webView
数据(例如 cookie、缓存等),因为非持久性 WKWebsiteDataStore
无法保存到磁盘(您可能会注意到WKWebsiteDataStore
实现了 NSCoding
,但它不适用于非持久性存储。
我想在不同 webView
中登录同一站点的多个帐户。例如,我有 Tab Bar Controller
包含三个 视图控制器 ,每个 视图控制器 包含 webView
。例如,我在每个 class 中嵌入 Whosebug
url for webView
。用户如何使用这三个 webView
同时登录不同的帐户?我已经试过了,但我一次只能登录一个用户。
我发现我需要为每个 UIWebView
创建单独的 cookie
,但大多数答案都在 objective-c 中,而不是我想要的正确答案。例如 (First
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://whosebug.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://whosebug.com")
let request = NSURLRequest(URL: requestURL!)
activityIndicator.hidesWhenStopped = true
activityIndicator.startAnimating()
webView.loadRequest(request)
}
func webViewDidFinishLoad(webView: UIWebView) {
activityIndicator.stopAnimating()
}
}
谢谢
您可以通过使用 WKWebSiteDataStore
的不同实例对 WKWebView
执行此操作:
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)
不幸的是,您将在应用重启后丢失 webView
数据(例如 cookie、缓存等),因为非持久性 WKWebsiteDataStore
无法保存到磁盘(您可能会注意到WKWebsiteDataStore
实现了 NSCoding
,但它不适用于非持久性存储。