在 swift UIWebKit 中处理外部链接?



我正在使用swift 4处理Web视图。 我正在加载本地html文件,在这些页面中有一些指向其他网站的链接,但是一旦我单击其中任何一个,我想在safari或默认浏览器中加载它们,而不是WebView(浏览器(。

我的网络视图称为"浏览器">

这是我的视图控制器.swift代码:

import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var browser: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

let htmlpath = Bundle.main.path(forResource: "kusrc/index", ofType: "html")
let url = URL(fileURLWithPath: htmlpath!)
let request = URLRequest(url: url)
browser.load(request)

}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


}

有人可以帮助我吗? 谷歌中的大多数结果都不是我需要的......

是否有可能制作一个 if 句子,其中询问字符串前缀是否 ="http://或 https://" 然后打开 safari,否则打开"浏览器">

我认为您正在寻找这种委托方法:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
guard let url = navigationAction.request.url else {
decisionHandler(.allow)
return
}
UIApplication.shared.open(url)
decisionHandler(.cancel)
} else {
decisionHandler(.allow)
}
}

如果要根据URL方案进行区分,可以使用URLComponents将URL拆分为多个部分。

let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
if components?.scheme == "http" || components?.scheme == "https" {
// insert your code here
}

编辑(更详细一点(:

  1. 在班级的最顶端导入WebKitimport WebKit
  2. 使您的类符合WKNavigationDelegate,方法是将其添加到父类后面:class ViewController: UIViewController, WKNavigationDelegate
  3. 将类分配给 WKWebView 的导航委托:browser.navigationDelegate = self
  4. 将上面的代码添加到您的类中

你的类最终应该是什么样子的要点:WKWebView 在 Safari 中打开链接

这里有一个关于该主题的非常好的教程:https://www.hackingwithswift.com/example-code/wkwebview/how-to-control-the-sites-a-wkwebview-can-visit-using-wknavigationdelegate

相关内容

  • 没有找到相关文章

最新更新