我已经构建了一个Swift
iOS应用,其唯一目的是在 WKWebView的帮助下显示网站。
这样可以正常工作,但按下链接(例如在[mailto:]
按钮上)不起作用,因为它无法打开任何内容!
有人有解决方案吗?
我已经阅读了很多关于解决这个问题的内容,但我不知道从哪里开始。
感谢您的帮助
[更新:]
以下代码显示了解决方案
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet var containerView : UIView! = nil
var webView: WKWebView?
override func loadView() {
super.loadView()
self.webView = WKWebView()
self.view = self.webView!
}
override func viewDidLoad() {
super.viewDidLoad()
webView?.navigationDelegate = self
let url = NSURL(string:"https://google.de")
let req = NSURLRequest (URL: url!)
self.webView!.loadRequest(req)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func prefersStatusBarHidden() -> Bool {
return true
}
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.URL?.absoluteString
let url_elements = url!.componentsSeparatedByString(":")
switch url_elements[0] {
case "mailto":
openCustomApp("mailto://", additional_info: url_elements[1])
decisionHandler(.Cancel)
default:
}
decisionHandler(.Allow)
}
func openCustomApp(urlScheme:String, additional_info:String){
if let requestUrl:NSURL = NSURL(string:"\(urlScheme)"+"\(additional_info)") {
let application:UIApplication = UIApplication.sharedApplication()
if application.canOpenURL(requestUrl) {
application.openURL(requestUrl)
}
}
}
}
答案 0 :(得分:4)
您必须实现以下方法(WebKit的一部分),该方法可用于解析此类URL:
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void)
我们的想法是在传递决策之前编写if语句来检查某些URL类型。更多信息:
请记住,代理的一些语法在Swift 3中略有改变 - 在使用教程时要记住这一点。如果你已经找到了这个,但你遇到了错误 - 发布你的代码。
编辑:只是针对偶然发现此问题的其他人的更新。请记住,您需要正确的mailto格式,例如mailto://tes@test.com
(正如OhadM在OP的评论中提到的那样)