【问题标题】:How do I open phone from tel: url link from WebKit iOS app using Swift如何从 tel 打开电话:使用 Swift 的 WebKit iOS 应用程序的 url 链接
【发布时间】:2019-08-08 01:08:47
【问题描述】:

我正在创建一个 iPhone 应用程序,并部分使用 WebKit 在应用程序中显示网页。目前,当我单击网站上显示的按钮时,它应该打开电话应用程序(带有电话:链接)并拨打号码。不幸的是,在应用程序中,它什么也不做,但是,它在 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 中加载的任何 tel: 链接按钮,并让它打开电话应用程序并拨打号码。请帮忙。

【问题讨论】:

    标签: ios swift webkit


    【解决方案1】:

    试试下面的代码,它运行良好 swift5。首先将“navigationDelegate”添加到您的 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
        }
    }
    

    注意:请尝试使用实际设备进行测试。

    【讨论】:

    • 谢谢。请投票,这样它也会对其他人有所帮助。
    【解决方案2】:

    这里只是打开电话应用程序和拨打电话的代码。可能对你有帮助。

    if let url = URL(string: "tel:+100000000"), UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-30
      • 2022-09-23
      • 2013-09-13
      • 1970-01-01
      • 2017-02-10
      • 2023-03-23
      • 1970-01-01
      • 2019-10-14
      • 2016-10-21
      相关资源
      最近更新 更多