关于iOS开发中使用WKWebView拨打电话的问题

不止是打字机效果:手把手教你用SpannableStringBuilder打造Android富文本AI对话界面 本文详细介绍了如何使用SpannableStringBuilder在Android平台上构建专业级AI对话界面,涵盖流式文本处理、富文本解析、交互优化等核心技术。通过实战代码示例,帮助开发者实现类似DeepSeek的AI产品交互效果,提升用户体验和应用专业度。 阅读详情
今天做公司的项目,发现一个显示电话号码的cell点击后没反应,按照逻辑应该是点击之后弹出拨号界面的,遂前往相关的类里面查看代码,发现上一个人在cell的点击事件里是这样写的:
NSString *phoneStr = [NSString stringWithFormat:@"tel:%@",phone]; 
WKWebView * callWebview = [[WKWebView alloc] init];
[callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:phoneStr]]];
[self.view addSubview:callWebview];

初一看,没啥问题啊,以前加载URL都是这样写的,为什么点击之后没反应呢?

正当我百思不得其解之时,猛然想到一个问题,以前加载URL都是用UIWebView写的,难道是iOS8.0带来的新控件——WKWebView的原因?

于是本着实验的心态,把WKWebView改成UIWebView试了试,居然能弹出拨号的对话框了,看来就是WKWebView的问题了,于是上网查了下WKWebView的特性,果然,是因为WKWebView默认禁止了跳转到appStore, 拨打电话, 唤起邮箱等一系列操作,而这些操作UIWebView是默认支持的。(不知道为什么这么做,难道是为了更安全?)

估计是上一个开发人员响应苹果的号召,积极把UIWebView改成WKWebView,却没想到苹果在WKWebView上放了一个大坑…更坑的是,这个坑还要留给我来解决…

知道了原因,解决起来就简单了,通过查阅资料,找到了一种实现WKWebView拨打电话的方法:

首先遵循WKNavigationDelegate代理:

@interface ViewController ()<WKNavigationDelegate>
callWebview.navigationDelegate = self;

然后调用WKNavigationDelegate的decidePolicyForNavigationAction方法:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    NSURL *URL = navigationAction.request.URL;
    NSString *scheme = [URL scheme];
    UIApplication *app = [UIApplication sharedApplication];
    // 打电话
    if ([scheme isEqualToString:@"tel"]) {
        if ([app canOpenURL:URL]) {
            [app openURL:URL];
            // 一定要加上这句,否则会打开新页面
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        } 
    }
   }
decisionHandler(WKNavigationActionPolicyAllow);
}

代码运行,电话倒是能正常拨打了,但是我的内心十分复杂…
这…都用到UIApplication了,还用啥WKWebView啊?我直接调用UIApplication的openURL方法不就行了吗?

于是把cell的点击事件里原来的代码全删了,改成:

NSString *phoneStr = [NSString stringWithFormat:@"tel://%@",phone];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
    //设备系统为IOS 10.0或者以上的
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneStr] options:@{} completionHandler:nil];
}else{
     //设备系统为IOS 10.0以下的
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneStr]];

顺利运行,问题解决,收工!

(顺便吐槽一下苹果,上面的代码是有警告的:‘openURL:’ is deprecated: first deprecated in iOS 10.0,意思是UIApplication的openURL方法在iOS10以上的系统已经弃用了,但是我们还是要写上去,为什么呢?因为我在查询资料的过程中发现有人反映推荐使用的openURL:options:completionHandler方法在iOS10以下的系统会闪退,这就有点坑爹了。你苹果不推荐我们使用这个已弃用的方法,但是你新的方法居然不向下兼容?你这是不把iOS10以下的用户当人看啊。行,你不把他们当人看,我们还是要把他们当人的。但是你让我们开发者手动判断版本就算了,你tm还弹警告,我…
…算了算了,我忍了…)

C# 实现 Modbus 通信全教程(支持 TCP 和 RTU,含完整错误处理) 环境准备:安装 NModbus4 库,明确设备参数(IP/串口、地址、数据类型);连接设备:TCP 用 TcpClient,RTU 用 SerialPort,注意超时和参数匹配;读写数据:根据数据类型调用对应方法(读保持寄存器用 ReadHoldingRegisters);错误处理:捕获连接、超时、协议等异常,针对性排查问题。掌握这些后,即可轻松实现与工业设备的 Modbus 通信,为上位机开发提供稳定的数据交互能力。 阅读详情

相关推荐

MAX30102心率血氧传感器

估算AC、DC值的方法如下:找两个波谷点,两个波谷点之间有一个波峰点,两个波谷点相连成一条直线,与Y轴平行的线穿过波峰点会与两个波谷点连接成的直线相交于一点,这个点就是DC点,DC点的Y轴对应值就是直流分量,AC分量的值为波峰点到DC点之间的差值。在医院测量中常用的一种血氧采集方式,如下图所示,光电传感器和光源分别置于手指的两侧,光源穿过手指被另一侧的光电二极管接收,根据光衰减量计算血氧浓度。那么,根据上面的Beer-Lambert 定理,针对测量的具体场景,测量过程的衰减为三层穿透物质衰减量的叠加。

qq_41861711的博客 1万+

iOS开发 解决WKWebView加载的h5,无法调用拨打电话功能

H5的拨打电话代码:<a href="tel:13112345678">移动WEB页面JS一键拨打号码咨询功能</a> UIWebView加载的h5,可以调用;但是WKWebView就是不行,找了半天,最后解决,在WKWebView的WKNavigationDelegate代理方法处理,代码如下:// 处理拨打电话以及Url跳转等等 - (void)webView:(WKWebView *)w

hou_manager的博客 2472

MATLAB安装配置libsvm(附MinGW64配置)

首先声明版本,本人PC系统Windows10 64bit,matlab安装的2016b,libsvm安装的version3.2.21.首先需要下载libsvm包:从林教授的网站上下载: http://www.csie.ntu.edu.tw/~cjlin/libsvm/2.将libsvm3.2.2解压到matlab/toolbox目录下:解压后:D:\matlab2016b\toolbox\libs...

github_35807147的博客 4万+

iOS 常用到的打电话webview

#import @interface CallNumberWebView : UIWebView + (void)showCallNumberOnParentView:(UIView *)parentView withNumber:(NSString *)callNumber; @end #impo

tabttoo的博客 448

9 海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例

海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例 快速入门 工业机器视觉 机器视觉

HuangGong2022的博客 7174

金证股份软件测试笔试题面试题

boss上这家公司的HR找到了我,我看了一下这家公司的业务,是我以前做过的基金与证券。还是很感兴趣的,决定去面试看看情况。 (因为只是想去涨面试经验,没有想拿offer,一些回答有点不太对,为后面木有offer埋下伏笔。其实有点亏,毕竟走路过去,而且还花了3个小时) 地点在金证股份科技大楼8楼。 2月25号 主要分为笔试题和面试。 1、笔试题 进来的时候直接给我一份笔试题做,做了一个半小时吧。 分为3道选择题和1道SQL查询题、1道案例设计题 选择题都是考察SQL函数,可能日常生活中没有见过

全村的希望的博客 4451

ios打电话的两种方式

ios打电话目前为止个人了解有两种方式: 1。通过添加添加webview,通过webview呼叫电话号码。 好处是:呼叫完成后,返回到该应用, 缺点是:每次呼叫都会弹出一个框:问你是否确定要呼叫该号码 webview必须放在外面,保证不在方法跳出的时候被释放掉 -(void)CallPhone{ NSString *phoneNum = @"";// 电话号码 NSURL *phon

gady_feifei的专栏 662

RK3568-Linux-麒麟系统---更新制作麒麟rootfs

RK3568 Linux系统 麒麟国产麒麟镜像

qiuzw2003的博客 5360

iOS 使用WKWebView加载h5页面无法调用拨打电话功能

一般h5页面有联系我们然后点击拨打电话的功能,在使用的时候发现了UIWebView加载的H5,可以调用;但是WKWebView就是不行,解决WKWebView加载H5页面,无法调用拨打电话功能的问题 H5的拨打电话代码是 移动WEB页面JS一键拨打号码咨询功能 解决的方法:在WKWebView的WKNavigationDelegate代理方法处理 解决代码如下:

3548

多角度模板匹配的模板创建技巧

基于形状的模板匹配多角度创建技巧

manuoo的专栏 3402

[AI8051U入门第一步]环境安装和按键控制流水灯

本文介绍了AI8051U单片机的开发环境搭建及GPIO应用。主要内容包括:1)通过ISP软件完成Keil开发环境配置;2)AI8051U特性介绍,包括32位8051内核、浮点运算单元及丰富外设;3)GPIO输入输出模式解析,并附流水灯控制代码;4)提供完整的系统初始化、延时函数及LED控制代码实现。文章配套资源包含完整工程代码,适用于智能硬件及物联网开发。

sinat_58149788的博客 671

iOS内嵌WKWebView拨打电话、发短信、发邮件没反应

iOS内嵌WKWebView拨打电话没反应 a href="tel:13112345678">拨打号码a> 内嵌H5的发送短信,打电话,发送邮件代码的处理 实现webview的代理方法 swift3.0 代码: // 处理拨打电话、发短信、发邮件以及Url跳转等等 func webView(_ webView: WKWebView, decidePolicyFor

wm9028的专栏 6456

flowable工作流看这一篇就够了(基础篇)

接下来我们构建一个非常简单的请假流程,Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。

qq_38196449的博客 2万+

iOS WKWebView 跳转appStore或者拨号

WKWebView默认禁止了一些跳转 UIWebView 打开ituns.apple.com跳转到appStore, 拨打电话, 唤起邮箱等一系列操作UIWebView默认支持的. WKWebView 默认禁止了以上行为,除此之外,js端通过window.open()打开新的网页的动作也被禁掉了. 如何支持呢? // 可以跳转appStore或者拨号 -(void)webView:(WK...

酸柠檬的博客 3078

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Cordova iOS WKWebView 整改解决方案

安装cordova-plugin-wkwebview-engine插件 iOS 9+以上才支持WKWebView cordova plugin add cordova-plugin-wkwebview-engine 解决跨域问题 打开Xcode找到这个文件CDVWKWebViewEngine.m, 找到这个方法,里面添加代码 - (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)settings {

曾经沧海难为水 4591

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

iOS 拨打电话

第一种 NSString *phoneStr = [NSString stringWithFormat:@"tel://%@",phone]; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) { //设备系统为IOS 10.0或者以上的 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneStr] options:@

Rex 1358

iOS开发 WKWebView加载的H5,无法调用拨打电话功能

h5的拨打电话代码是: <a href="tel:+8400000000" style="color: #4CA74F;float: right;">+84 00000000</a> 网上找了很多都没能解决 最后自己处理如下 #pragma mark - WKNavigationDelegate - (void)webView:(WKWebView *)webView...

听雨轩 919

iOS 介绍使用UIWebView和WKWebView加载进度条的代码+demo

简介 如果项目支持iOS7之前的系统版本的话,可以做个系统判断,这里就不介绍了,这里还是推荐使用WKWebView,先介绍下使用这个的好处,然后介绍使用UIWebView和WKWebView加载进度条的代码。 开发App的过程中,常常会遇到在App内部加载网页,通常用UIWebView加载。这个自iOS2开始使用的网页加载器一直是开发的心病:加载速度慢,占用内存多,优化困难。如果加载网页多

974

Swift 使用WKWebview过程中遇到的问题汇总

交互步骤 显示本地HTML乱码 webview调用系统打电话的功能有问题 点击某些按钮没有反应 弹出框问题 调用系统打电话发短信邮件的问题 HTML端target为_blank的情形 交互步骤网上有许多,个人觉得这个博客写的比较好显示本地HTML乱码 <meta http-equiv="Content-Type" content="text/html; charset=gb2312”/>将gb231

lxhxhxhxh的博客 5240

cordova ios wkwebview iframe引入页面在真机上显示空白,cookie,session失效的问题

说明:因为最近在整理项目的一些资料,顺便记录一下之前工作中遇到的一些其他问题,不喜勿喷。 背景:自从项目从uiwebview更换成wkwebview后,iOS端原本在uiwebview上运行的好好的项目,在wkwebview上频繁出现bug,当时都差点吐了,开玩笑的,虽然难搞,但是还是得继续搬砖。 问题1:cordova ios工程换成wkwebview后,iframe引入的页面在真机上无法加载,显示空白页面?同样的设置,在uiwebview上确是好好的? 解决办法1:打开工程,在staging目录下

qq_34469600的博客 4165

WKWebView 无法触发拨打电话

处理拨打电话

程序鹅 1169

IOS UIWebview/WKWebView 禁用复制粘贴、超链接

前言: 有这样的一个需求,要求客户端展示的html内容,用户不可复制粘帖、点击里面的超链接。本来这个功能就是h5嵌入原生功能的,里面有查看附件的功能,而且这个附件不是以url的链接方式给的,是以流的形式,客户端先下载下来再展示出来的。 (一)UIWebview如何操作 一、拷贝粘贴问题 1、于是一直搜索UIWebview禁用复制粘贴、超链接,结果搜索出来的解决方法如下: 方法一: if (@ava...

夏天的风轻轻吹过~~ 5120

Wkwebview ,app原生界面捕获H5拨打电话的方法,注意一定要指定代理

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(nonnull WKNavigationAction *)navigationAction decisionHandler:(nonnull void (^)(WKNavigationActionPolicy))decisionHandler{ NSU...

cola_wh的博客 593

ios WKWebview

iOS8之后,苹果推出了WebKit这个框架,用来替换原有的UIWebView,新的控件优点多多,不一一叙述。由于一直在适配iOS7,就没有去替换,现在仍掉了iOS7,以为很简单的就替换过来了,然而在替换的过程中,却遇到了很多坑。还有一点就是原来写过一篇文章 Objective-C与JavaScript交互的那些事以为年代久远的UIWebView已经作古,可这篇文章现在依然有一定的阅读量。所以在决...

qq_27909209的博客 1467

JS在WKWebView内无法调起拨打电话

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSURL *url = navigationAction.request.URL; NSString *scheme = [url sch

RookieJin的博客 553

IOS 系统应用调用

文章目录拨打电话功能举例实现方式一:使用openURL:options:completionHandler:方法This app is not allowed to query for scheme tel解决实现方式二:使用WKWebView实现方式三:使用UIWebView发送短信MFMessageComposeViewController简介举例发送邮件MFMailComposeViewCo...

煮酒Shae 1250

iOS WKWebView使用总结

点击上方“iOS开发”,选择“置顶公众号”关键时刻,第一时间送达!    先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明明只是...

iOS_开发 384
allocliu
博客等级 码龄9年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值