2016-11-24 157 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的訣竅! –