2016-11-24 69 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にバインドすることで、ポリシーgetが呼び出されたことを確認できます。トリックのためのthx! –

関連する問題