【问题标题】:How to show call dialog when click on action tag?单击操作标签时如何显示呼叫对话框?
【发布时间】:2022-11-07 12:26:20
【问题描述】:

[![在此处输入图像描述][1]][1] [1]:https://i.stack.imgur.com/7FUgg.png

单击通话按钮(电话图标)时,我想打开一个电话号码警报表(例如+ 91-1234567890)。 我的图像显示了在我的应用程序中调用的网页页面,并且我在代码中使用了 WebKit。

我尝试过的, 我是 webkit 的新手,帮帮我。

import UIKit
import WebKit
import Alamofire

class ContinueViewController: UIViewController, WKUIDelegate {

    func getPostString(params:[String:Any]) -> String{
            var data = [String]()
            for(key, value) in params
            {
                data.append(key + "=\(value)")
            }
            return data.map { String($0) }.joined(separator: "&")
    }

    @IBOutlet weak var activityView: UIActivityIndicatorView!
    @IBOutlet weak var webview: WKWebView!

    var url: URL?
    var id = 0, skill = 0
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if #available(iOS 14.0, *) {
            webview.configuration.defaultWebpagePreferences.allowsContentJavaScript = true
        }else {
            let preferences = WKPreferences()
            preferences.javaScriptEnabled = true

            let configuration = WKWebViewConfiguration()
            configuration.websiteDataStore = WKWebsiteDataStore.nonPersistent()
            configuration.preferences = preferences
        }

        webview.navigationDelegate = self
        self.navigationController?.navigationBar.isHidden = true
        webview.uiDelegate = self

    }
    override func viewDidLoad() {
        super.viewDidLoad()
        activityView.startAnimating()
        guard let url = self.url else { return }
        var req = URLRequest(url: url)
        let params = ["id" : id,"skill" : skill]
        let postString = self.getPostString(params: params)
        req.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        req.httpMethod = "POST"
        req.httpBody = postString.data(using: .utf8)
        self.webview.load(req)
    }
}

extension ContinueViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        activityView.stopAnimating()
    }
}

【问题讨论】:

  • 呼叫按钮如何处理onClick 事件?它是否使用href 将页面重定向到tel:xxxxxxxxxx 之类的东西?如果是,您需要在WKNavigationDelegate 上处理webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
  • 是的,它使用如下代码的href。 <a style="pointer-events:block" href="tel:00000000" class="btn-form next_step cst d-block mx-auto my-4">点击致电我们</a>

标签: ios swift webkit


【解决方案1】:

在您的 WKNavigationDelegate 实现中,您可以执行以下操作:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多