在多个WKWebView之间共享会话
问题描述:
我需要实现计费逻辑。它执行一些重定向,然后在新窗口中打开新框架 - 这就是它在Web浏览器上的工作原理。在多个WKWebView之间共享会话
我在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)
}
}
答
我已经解决了这个问题,通过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)
}
}
+0
啊,好的,通过绑定他们到_self你确保策略被调用。 thx的诀窍! –
嗨亚历克斯:你到底解决了吗? –
@JoergSimon是的,只需发布并在下面回答。 – AlexEdunov