如何使用 Swift 从 WebKit iOS 应用程序从电话 url link 打开 phone
How do I open phone from tel: url link from WebKit iOS app using Swift
我正在创建一个 iPhone 应用程序并部分使用 WebKit 在应用程序中显示网页。目前,当我单击网站上显示的按钮时,它应该打开 phone 应用程序(电话:link)并拨打该号码。不幸的是,在应用程序中,它什么都不做,但是,它在 chrome/ safari 中工作正常。
我已经尝试搜索互联网并尝试了一些建议,但到目前为止似乎什么都做不了。
import UIKit
import WebKit
class ShopViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
@IBOutlet weak var backButton: UIBarButtonItem!
@IBOutlet weak var shopWebKit: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
shopWebKit.navigationDelegate = self
shopWebKit.uiDelegate = self
// Do any additional setup after loading the view.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear( animated )
let urlString:String = "https://www.somewebsite.com"
let url:URL = URL(string: urlString)!
let urlRequest:URLRequest = URLRequest(url: url)
shopWebKit.load(urlRequest)
}
@IBAction func backButtonTapped(_ sender: Any) {
if shopWebKit.canGoBack{
shopWebKit.goBack()
}
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
backButton.isEnabled = webView.canGoBack
}
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
if navigationAction.targetFrame == nil {
webView.load(navigationAction.request)
}
return nil
}
}
我希望能够单击 WebKit 中加载的任何电话:link 按钮并让它打开 phone 应用程序并拨打号码。请帮忙。
这里只是打开 phone 应用程序并拨打电话的代码。说不定能帮到你。
if let url = URL(string: "tel:+100000000"), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
Try below code it's working fine swift5. first add 'navigationDelegate' to your WKWebView.
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
switch navigationAction.request.url?.scheme {
case "tel":
UIApplication.shared.open(navigationAction.request.url!, options: [:], completionHandler: nil)
decisionHandler(.cancel)
break
default:
decisionHandler(.allow)
break
}
}
Note: try testing with actual device.
我正在创建一个 iPhone 应用程序并部分使用 WebKit 在应用程序中显示网页。目前,当我单击网站上显示的按钮时,它应该打开 phone 应用程序(电话:link)并拨打该号码。不幸的是,在应用程序中,它什么都不做,但是,它在 chrome/ safari 中工作正常。
我已经尝试搜索互联网并尝试了一些建议,但到目前为止似乎什么都做不了。
import UIKit
import WebKit
class ShopViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
@IBOutlet weak var backButton: UIBarButtonItem!
@IBOutlet weak var shopWebKit: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
shopWebKit.navigationDelegate = self
shopWebKit.uiDelegate = self
// Do any additional setup after loading the view.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear( animated )
let urlString:String = "https://www.somewebsite.com"
let url:URL = URL(string: urlString)!
let urlRequest:URLRequest = URLRequest(url: url)
shopWebKit.load(urlRequest)
}
@IBAction func backButtonTapped(_ sender: Any) {
if shopWebKit.canGoBack{
shopWebKit.goBack()
}
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
backButton.isEnabled = webView.canGoBack
}
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
if navigationAction.targetFrame == nil {
webView.load(navigationAction.request)
}
return nil
}
}
我希望能够单击 WebKit 中加载的任何电话:link 按钮并让它打开 phone 应用程序并拨打号码。请帮忙。
这里只是打开 phone 应用程序并拨打电话的代码。说不定能帮到你。
if let url = URL(string: "tel:+100000000"), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
Try below code it's working fine swift5. first add 'navigationDelegate' to your WKWebView.
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
switch navigationAction.request.url?.scheme {
case "tel":
UIApplication.shared.open(navigationAction.request.url!, options: [:], completionHandler: nil)
decisionHandler(.cancel)
break
default:
decisionHandler(.allow)
break
}
}
Note: try testing with actual device.