2016-11-24 190 views
0

我需要实现计费逻辑。它执行一些重定向,然后在新窗口中打开新框架 - 这就是它在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) 
    } 
} 
+0

嗨亚历克斯:你到底解决了吗? –

+0

@JoergSimon是的,只需发布​​并在下面回答。 – AlexEdunov

回答

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) 
    } 
} 
+0

啊,好的,通过绑定他们到_self你确保策略被调用。 thx的诀窍! –

相关问题