0
Facebookのアプリの動作を複製したいと思います。外部リンクをクリックすると、新しいブラウザで開きます(Safariには表示されません)。外部リンクをWkWebViewから新しいWKWebviewに開く
現在、私のWebサイトを読み込むWKWebViewがあります。私はクリックイベントでユーザーを捕まえて開き、Safariで言うことができます。私は今、
import UIKit
import Darwin
import SafariServices
import WebKit
class ViewController: UIViewController, UIWebViewDelegate, SFSafariViewControllerDelegate, WKNavigationDelegate {
let url = "http://myurl:3000"
var webView : WKWebView!
var webView2 : WKWebView!
@IBOutlet weak var progressView: UIProgressView!
var myTimer = Timer()
var theBool: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: self.url)!
webView.load(URLRequest(url: url) as URLRequest)
webView.allowsBackForwardNavigationGestures = true
}
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
func webViewDidFinishLoad(_ webView: UIWebView) {
theBool = true;
}
func webViewDidStartLoad(_ webView: UIWebView) {
myTimer = Timer.scheduledTimer(timeInterval: 0.06, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true)
theBool = false;
progressView.progress = 0.0
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
webView2 = WKWebView()
webView2.navigationDelegate = self
view = webView2
let url = navigationAction.request.url
webView2.load(URLRequest(url: url!) as URLRequest)
} else {
print("not a user click")
decisionHandler(.allow)
}
}
func updateTimer()
{
if (theBool) {
if (progressView.progress >= 1) {
progressView.isHidden = true;
myTimer.invalidate()
}
else {
progressView.progress += 0.1;
}
}
else {
if (progressView.isHidden){
progressView.isHidden = false
}
progressView.progress += 0.05;
if (progressView.progress >= 0.60) {
progressView.progress = 0.60;
}
}
}
}
問題は、それが構築されていても、ときに私は、外部リンクをクリックして、ということです...、代わりのSafariで開くと、新しいWKWebViewを作成し、そこにそのリンクを表示したいですアプリがクラッシュします。
libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
webView2.load呼び出し後にdecisionHandler(.cancel)が見つかりません。チェックしてください –