【问题标题】:Share session between multiple WKWebView在多个 WKWebView 之间共享会话
【发布时间】:2017-04-08 17:57:48
【问题描述】:

我需要实现计费逻辑。它会进行一些重定向,然后在新窗口中打开新框架——这就是它在网络浏览器上的工作方式。

我在 WKWebView 中显示计费框架。我抓住了它想要打开新框架(navigationAction.targetFrame.isNil)并要求 webView 加载新请求的时刻。正在加载新框架,但未发生某些重定向,并且计费显示错误。会话似乎丢失了。

我尝试了另一种方法:在新的 webView 中加载新请求。当我初始化 webView 时,我从上一个中传递了 processPull,在这篇文章之后:https://github.com/ShingoFukuyama/WKWebViewTips#cookie-sharing-between-multiple-wkwebviews 问题没有解决。

lazy var webView: WKWebView = { [unowned self] in
    let preferences = WKPreferences()
    preferences.javaScriptEnabled = true
    preferences.javaScriptCanOpenWindowsAutomatically = true

    let configuration = WKWebViewConfiguration()
    configuration.preferences = preferences

    let webView = WKWebView(frame: CGRect.zero, configuration: configuration)
    webView.navigationDelegate = self
    webView.UIDelegate = self
    webView.estimatedProgress
    webView.scrollView.backgroundColor = UIColor.binomoDarkGrey()
    self.view.addSubview(webView)
    webView.snp_makeConstraints { [unowned self] (make) in
        make.edges.equalTo(self.view)
    }

    return webView
}()

// MARK: WKNavigationDelegate

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
    if navigationAction.targetFrame.isNil {
        decisionHandler(.Cancel)
        webView.loadRequest(navigationAction.request)
    } else {
        decisionHandler(.Allow)
    }
}

【问题讨论】:

  • 嗨,Alex:你最后解决了吗?
  • @JoergSimon 是的,刚刚发布并在下面回答。

标签: ios swift wkwebview wkwebviewconfiguration


【解决方案1】:

通过从 JavaScript 设置目标属性,我已经解决了相当棘手的问题。

extension WebKitViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        let js = "document.getElementsByTagName('form')[0].setAttribute('target', '_self')"
        webView.evaluateJavaScript(js, completionHandler: nil)
    }
}

【讨论】:

  • 啊,好吧,所以通过将它们绑定到 _self 来确保策略被调用。谢谢你的伎俩!
  • 不适合我,如果我错了,你能建议一下吗,这是 Objective C [webView evaluateJavaScript:@"document.getElementsByTagName('form')[0].setAttribute('target', '_self')" completionHandler:nil];
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2013-06-20
相关资源
最近更新 更多