WebKit 打电话失败的问题

WKWebView打电话失败的解决方案
在使用WebKit框架的iOS app中,发现无法通过点击客服电话链接进行拨号。经过分析,WKWebView不支持以`tel:`开头的URL,导致电话拨打失败。通过监听并拦截`tel:`请求,在代理方法中阻止其加载,改用`openURL`方法实现电话拨打功能,成功解决了问题。此外,文章还提到纯H5页面的卡顿、兼容性和用户体验问题,最终团队选择转向React Native。

关于WebKit

最近接手的一个app页面全部用H5写的,使用的是WebKit框架。我之前写的app也有H5页面,不过只有两页,用的是webView,全H5写app用WebKit是很有必要的,在这里推荐两篇文章快速了解WebKit:
iOS 8 WebKit框架概览(上)
iOS 8 WebKit框架概览(下)

打电话失败

然后,问题来啦。app有联系客服功能,点击客服电话,发现电话打不出去。

注:电话打不出去的意思是压根没有调用电话这个功能,不是没人接啊~
题外话: 最近电话号码13585904041很火,我也拿来用一下

通过控制台Log可以发现,请求失败了:
“`

pragma mark 页面加载失败之后调用

  • (void)webView:(WKWebView )webView didFailProvisionalNavigation:(WKNavigation )navigation withError:(NSError *)error
    {
    NSLog(@”页面加载失败:\n %@”,error);
    }

    “`

页面加载失败:
Error Domain=NSURLErrorDomain Code=-1002 “unsupported URL” UserInfo={_WKRecoveryAttempterErrorKey=, NSErrorFailingURLStringKey=tel:13

import requests import json from datetime import datetime def fetch_person_info(certificate_no): """ 根据身份证号获取个人信息 :param certificate_no: 身份证号 :return: 返回解析后的JSON数据,若失败则返回None """ # 构造请求URL url = "https://api.zsbsoft.com/hcn-web/*.jsonRequest" # 构造请求负载 payload = [ { "certificateNo": certificate_no, # 使用用户输入的身份证号 "source": "01", "certificateType": "01" } ] # 构造请求头 headers = { 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/11581", 'Content-Type': "application/json", 'xweb_xhr': "1", 'x-service-method': "checkFamilyMember", 'x-access-token': "a4c98445-eed6-4a42-a8a1-95d77d32dfab", 'x-service-id': "hcn.person", 'content-type': "application/json;charset=UTF-8", 'sec-fetch-site': "cross-site", 'sec-fetch-mode': "cors", 'sec-fetch-dest': "empty", 'referer': "https://servicewechat.com/wxc7f6522a34c30f24/36/page-frame.html", 'accept-language': "zh-CN,zh;q=0.9", 'Cookie': "sl-session=P9HjZftR32eG9qWMwu7IKA==" } try: # 发送POST请求 response = requests.post(url, data=json.dumps(payload), headers=headers) response.raise_for_status() # 检查请求是否成功 return response.json() # 返回解析后的JSON数据 except requests.exceptions.RequestException as e: print(f"请求失败: {e}") return None def format_response(response): """ 格式化响应内容 :param response: 请求返回的JSON数据 :return: 格式化后的字符串 """ if not response or response.get("code") != 200: return "未能获取信息,请检查输入或网络连接。" body = response.get("body", {}) certificate = body.get("certificate", {}) # 格式化输出 info = f""" 姓名:{body.get("personName")} 身份证号:{certificate.get("certificateNo")} 性别:{body.get("sexText")} 出生日期:{body.get("dob")} 民族:{body.get("nationText")} 国籍:{body.get("nationalityText")} 电话号码:{body.get("phoneNo")} 地址:{body.get("address")} 证件来源:{certificate.get("sourceText")} 证件类型:{certificate.get("certificateTypeText")} 证件添加时间:{certificate.get("addTime")} """ return info.strip() if __name__ == "__main__": # 用户自定义输入身份证号 certificate_no = input("请输入身份证号:") # 调用函数获取信息 result = fetch_person_info(certificate_no) # 打印格式化后的响应内容 print(format_response(result))根据这个所需要的重新优化脚本 全部测试一下 保证能运行
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值