gpt4 book ai didi

ios - 从 WkWebView 打开外部链接到一个新的 WKWebview

转载 作者:行者123 更新时间:2023-11-28 08:06:54 28 4
gpt4 key购买 nike

我想复制 Facebook 应用程序的行为,当您单击外部链接时,它会在新浏览器中打开(但它不在 Safari 中)。

我目前有一个加载我的网站的 WKWebView。我可以在点击事件中捕获用户并打开它们,比方说在 Safari 中。我现在不想在 Safari 中打开它们,而是创建一个新的 WKWebView 并在那里显示该链接...

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;
}
}
}

}

问题是,即使它正在构建,当我点击外部链接时,应用程序也会崩溃。

libc++abi.dylib:以 NSException 类型的未捕获异常终止
(lldb)

最佳答案

我建议您实现此WKUIDelegate 方法,并在该方法内将 URL 加载到新的 WKWebView 中。

optional func webView(_ webView: WKWebView, 
createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures) -> WKWebView?

关于ios - 从 WkWebView 打开外部链接到一个新的 WKWebview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44832589/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com