gpt4 book ai didi

ios - 如何使用 WKWebView 点击电话号码

转载 作者:搜寻专家 更新时间:2023-11-01 06:12:56 25 4
gpt4 key购买 nike

swift 4iOS 11.4

我正在尝试学习如何使用 WKWebView,但我遇到了一个问题,即任何电话号码链接实际上都不会显示弹出窗口来调用该号码。

我关注了this下面列出了答案和打印的错误。我正在使用的网站是一个使用 quickactionbar 的 wix 网站(我知道它使用 tel:xxxxx 所以它应该可以工作,因为它可以在 safari 上工作)知道为什么要这样做吗?

编辑:此外,我不完全确定要搜索什么才能获得我需要的答案。如果您确切地知道要搜索什么来找到这个问题的答案,我也会非常高兴。

如果我长按它会识别出这是一个电话号码,但如果我只是点击它就不会执行任何操作

import Foundation
import WebKit

class WebKitViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {

var webView: WKWebView!

@IBOutlet weak var backButton: UIBarButtonItem!

@IBAction func backButtonAction(_ sender: UIBarButtonItem) {
if self.webView.canGoBack {
self.webView.goBack()
}
}
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
webView.navigationDelegate = self
view = webView
}

override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "Link")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)

}

// func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// backButton.isEnabled = webView.canGoBack
// }


//Code from answer on StackOverflow
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation) {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
print("didStartProvisionalNavigation: \(navigation)")
}

func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation) {
print("didReceiveServerRedirectForProvisionalNavigation: \(navigation)")
}

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation, withError error: Error) {
print("didFailProvisionalNavigation: \(navigation), error: \(error)")
}

func webView(_ webView: WKWebView, didFinishLoading navigation: WKNavigation) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
print("didFinishLoadingNavigation: \(navigation)")
}


func _webViewWebProcessDidCrash(_ webView: WKWebView) {
print("WebContent process crashed; reloading")
}

func webView(_ webView: WKWebView,createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?{
//if <a> tag does not contain attribute or has _blank then navigationAction.targetFrame will return nil
if let trgFrm = navigationAction.targetFrame {

if(!trgFrm.isMainFrame){
UIApplication.shared.isNetworkActivityIndicatorVisible = true
self.webView.load(navigationAction.request)
}
}



return nil
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!){

UIApplication.shared.isNetworkActivityIndicatorVisible = false
print("didFinish: \(String(describing: self.webView.url)); stillLoading:\(self.webView.isLoading ? "NO" : "YES")")

}



func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (_: WKNavigationResponsePolicy) -> Void) {
print("decidePolicyForNavigationResponse")
decisionHandler(.allow)
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (_: WKNavigationActionPolicy) -> Void) {

decisionHandler(.allow)
}


}

错误:

didFailProvisionalNavigation: <WKNavigation: 0x101865bd0>, error: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={_WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x101856b80>, NSErrorFailingURLStringKey=tel:+12199874536, NSErrorFailingURLKey=tel:+12199874536, NSLocalizedDescription=unsupported URL, NSUnderlyingError=0x1018641a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}}

最佳答案

您还可以在 WKWebViewConfiguration 上将 dataDetectorTypes 设置为 .phoneNumber。所有检测到的电话号码都将转换为包含电话号码周围的链接。

configuration.dataDetectorTypes = .phoneNumber

使用这个委托(delegate)函数-

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

关于ios - 如何使用 WKWebView 点击电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51460119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com