【问题标题】:Separate cookie storage for two (UIWebView or WKWebView)两个单独的 cookie 存储(UIWebView 或 WKWebView)
【发布时间】:2016-12-07 06:56:58
【问题描述】:

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

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()
    }


}

谢谢

【问题讨论】:

标签: ios swift uiwebview wkwebview nshttpcookie


【解决方案1】:

您可以通过WKWebView 使用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)

不幸的是,应用重启后你会丢失webView的数据(比如cookies、缓存等),因为非持久的WKWebsiteDataStore不能保存到磁盘(你可以注意到WKWebsiteDataStore实现了@987654328 @,但它不适用于非持久性商店)。

【讨论】:

  • 埃尔莫洛夫,谢谢。我看到了WKWebSiteDataStore,但这仅在 iOS 9 中可用。你知道我如何在 iOS 8 中做到这一点。我还检查了你的代码,它给了我错误 Type 'WKWebsiteDataStore' has no member'非持久性' ??
  • 在 iOS 8 中可以使用 _WKWebsiteDataStore 方法 nonPersistentDataStoreWKWebViewConfiguration 中的私有属性 _WKWebsiteDataStore *_websiteDataStore 的私有类。您可以使用运行时函数创建此类的实例(了解Objective-C 中的运行时)。此外,您需要知道 Apple 禁止在生产代码中使用私有类/方法,但您可以在测试项目中尝试。上面的错误与您使用的 Swift 版本有关。我使用 Swift 3 (Xcode 8 beta),您可能需要将方法名称更改为 nonPersistentDataStore
  • 谢谢,现在它可以工作了。你的意思是我只能将私有类/方法用于测试项目而不是在应用商店上部署。我还有一个问题要问你,你能告诉我有什么方法可以使用这种方法将 cookie 保存在存储中,以便下次重新启动应用程序后从我离开的地方打开 wkwebview 吗??
  • 请阅读我上面的回答;据我所知,这是不可能的。
  • @Roman Ermolov 嗨,您在某些问题中的代码,当我当时将 tab2 退回到 tab 1 时,您能帮我解决吗? .所以请帮助我,我是新的 ios 开发人员,所以在这种情况下我不明白我该怎么办。
猜你喜欢
  • 2013-05-09
  • 2017-11-25
  • 2015-03-17
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 2010-10-20
  • 2014-07-06
  • 1970-01-01
相关资源
最近更新 更多