相关疑难解决方法(0)

WKWebView持久存储Cookie

我在我的原生iPhone应用程序中,在允许登录/注册的网站上使用WKWebView,并将会话信息存储在cookie中.我试图找出如何持久存储cookie信息,因此当应用程序重新启动时,用户仍然可以使用其Web会话.

我在应用程序中有2个WKWebViews,它们共享一个WKProcessPool.我从一个共享进程池开始:

WKWebView

然后为每个WKWebView:

WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init]; 
theConfiguration.processPool = processPool; 
self.webView = [[WKWebView alloc] initWithFrame:frame configuration:theConfiguration];
Run Code Online (Sandbox Code Playgroud)

当我使用第一个WKWebView登录,然后一段时间后将操作传递给第二个WKWebView时,会话保留,因此cookie已成功共享.但是,当我重新启动应用程序时,会创建一个新的进程池并销毁会话信息.有没有办法让会话信息通过应用程序重启持续存在?

cookies ios wkwebview

32
推荐指数
5
解决办法
2万
查看次数

如何删除WKWebview cookie

现在我这样做

    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [storage cookies])
    {
        [storage deleteCookie:cookie];
    }
Run Code Online (Sandbox Code Playgroud)

但它不适用于iOS 8,64位设备.

WKWebview干净的其他任何方式?任何帮助将不胜感激.谢谢.

xcode uiwebview ios wkwebview wkwebviewconfiguration

23
推荐指数
5
解决办法
2万
查看次数

WKWebView,获取所有cookie

我想从WKWebView获取所有cookie.为什么?我已经启动了一个使用基于Web的身份验证的项目.因此,我应该拦截cookie以确保用户已登录并用于其他目的.另一种情况 - 想象一下,如果用户登录,而不是"杀死"应用程序 - 由于存储此cookie会话的一些延迟将丢失:(.

问题似乎是cookie被缓存而不是立即保存到文件中.

(@Kemenaran从这里 - 下面的第5页)

我试图抓住他们的地方 -

webView:decidePolicyForNavigationResponse:decisionHandler:,

func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) {

  if let httpResponse = navigationResponse.response as? NSHTTPURLResponse {
    if let headers = httpResponse.allHeaderFields as? [String: String], url = httpResponse.URL {
      let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url {
      for cookie in cookies {
            NSHTTPCookieStorage.shared.set(cookie)
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但并非所有请求都是导航,因此跳过一个cookie(在我的情况下),请参阅下面的详细信息

在此输入图像描述

关于我试过的其他选项的几句话......

  1. 是的,我知道从iOS 11开始,我们可以在这里WKHTTPCookieStore提到.但我的项目应该支持iOS 9+

在此输入图像描述

  1. 我100%肯定,在登录后5-10秒,所需的cookie将保存到NSHttpCookieStorage(至少我几天的所有测试都确认)

  2. 我尝试使用提供的观察者NSHTTPCookieManagerCookiesChangedNotification,但它只为内部的cookie提供回调webView:decidePolicyForNavigationResponse:decisionHandler

  3. 我也尝试使用这里提到的一些JS来获取cookie …

nshttpcookie ios swift wkwebview nshttpcookiestorage

6
推荐指数
1
解决办法
2126
查看次数

用户代理在运行时更改

我正在尝试在我的应用上添加移动,桌面版网站功能.但问题是User Agent只能在webView加载之前立即更改.在我的应用程序中,我添加按钮一个MobileDesktop版本站点的第二个.UIWebView选择User Agent刚开始.任何人都告诉我有没有办法User Agent在运行时更改.谢谢

 var defaultUserAgent = String()
    @IBOutlet weak var webView: UIWebView!

    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = NSURL(string: "https://www.youtube.com")
        let request = NSURLRequest(URL: url!)
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()
        webView.loadRequest(request)
    }

    @IBAction func mobile(sender: AnyObject) {
        NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": defaultUserAgent])
        print(defaultUserAgent)

        let url = NSURL(string: "https://www.youtube.com")
        let request = NSURLRequest(URL: url!)
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()
        webView.loadRequest(request)

    }

    @IBAction func desktop(sender: AnyObject) { …
Run Code Online (Sandbox Code Playgroud)

uiwebview swift swift2

5
推荐指数
1
解决办法
573
查看次数

与 Safari 同步 - SFSafariViewController 的扩展

我知道SFSafariViewController有私人 cookie 存储和其他实现。但是,我知道我们可以为每个(每个本地系统)Swift 类编写一个扩展。我需要与本机 Safari 共享 cookie,或者Safari使用一些标头请求从我的应用程序打开。至少,如何创建一个API用于获取/设置 cookie 的?

safari ios swift sfsafariviewcontroller sfauthenticationsession

2
推荐指数
1
解决办法
3282
查看次数