点击 wkwebview 链接时不会打开

2024-04-03

我正在开发一个应用程序,其中一些代码继承自其他开发人员,并具有加载 html 文件的 Web 视图。

html 文件中包含电话号码和网页链接。如果长按电话号码将会打开,但 html 链接不会打开。

我希望它们通过短按打开,但短按什么也没有发生。如果我长按,则会弹出系统对话框,其中包含“打开”选项,但按“打开”则不会执行任何操作。

这是我刚才的代码:

#import "IntroductionViewController.h"

@interface IntroductionViewController () <WKNavigationDelegate, WKUIDelegate>

@end

@implementation IntroductionViewController

@synthesize html_file_name;
@synthesize web_view;
@synthesize spinner;

- (void)viewDidLoad {
[super viewDidLoad];

self.navigationController.navigationBarHidden = NO;

[self setTitle:_title_string];

[self.web_view bringSubviewToFront:spinner];
[spinner setHidden:NO];
[spinner startAnimating];

NSURL *url = [[NSBundle mainBundle] URLForResource:html_file_name withExtension:@"html"];
[self.web_view loadRequest:[NSURLRequest requestWithURL:url]];
self.web_view.navigationDelegate = self;
self.web_view.UIDelegate = self;
}

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error {
[spinner setHidden:YES];
[spinner stopAnimating];
}

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
[spinner setHidden:YES];
[spinner stopAnimating];
}

- (BOOL)webView:(WKWebView *)webView shouldStartLoadWithRequest (NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"called here");
if (navigationType == UIWebViewNavigationTypeLinkClicked ) {
    UIApplication *application = [UIApplication sharedApplication];
    [application openURL:[request URL] options:@{} completionHandler:nil];
    return YES;
}
return YES;
}

@end

“shouldStartLoadWithRequest”永远不会被调用。


我设法通过删除代码的“shouldStartLoadWithRequest”部分并添加以下部分来实现此工作:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(nonnull WKNavigationAction *)navigationAction decisionHandler:(nonnull void (^)(WKNavigationActionPolicy))decisionHandler {
if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {
    if (navigationAction.request.URL) {
        NSLog(@"%@", navigationAction.request.URL.host);
        if (![navigationAction.request.URL.resourceSpecifier containsString:@"ex path"]) {
            if ([[UIApplication sharedApplication] canOpenURL:navigationAction.request.URL]) {
                UIApplication *application = [UIApplication sharedApplication];
                [application openURL:navigationAction.request.URL options:@{} completionHandler:nil];
                decisionHandler(WKNavigationActionPolicyCancel);
            }
        } else {
            decisionHandler(WKNavigationActionPolicyAllow);
        }
    }
} else {
    decisionHandler(WKNavigationActionPolicyAllow);
}
}

现在,所有链接都可以按预期打开,在单独的(新)网络链接窗口中,只需轻按一下即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

点击 wkwebview 链接时不会打开 的相关文章

  • iOS AVCaptureVideoDataOutput 消耗太多内存

    我在用AVFoundation使用iPhone相机捕获视频的框架 我的代码 self session AVCaptureSession alloc init self output AVCaptureVideoDataOutput allo
  • 如何为移动应用程序创建无密码登录

    我有兴趣在移动应用程序和 API 之间构建某种无密码登录 假设我可以控制两者 动机是必须登录对用户来说非常烦人并且存在安全风险 例如 用户将重复使用现有密码 我希望用户能够立即开始使用该应用程序 我想知道是否有一些可行的技术 例如 在移动设
  • Swift Firebase - 如何在使用 queryOrdered(byChild: ).queryEqual(toValue: ) 时获取所有 k/v

    root reviews postABC postId reviewXYZ I want everything under this reviewUID buyerUID 01010 text fast shipping responseT
  • 在集合视图单元格中播放视频,就像在 Facebook 应用程序时间轴中播放的视频一样

    我想在集合视图单元格中播放视频 要求就像 Instagram 时间线 播放视频就像在 facebook 时间线中播放视频 为此 我使用了 UICollectionViewCell 我有一些图像 没有视频 现在我是来自画廊的图像 我正在使用相
  • 小视频播放

    根据我从互联网收集的信息 MPMoviePlayerController 类不支持小视频播放 因此 为了死马当活马医 我想知道可以使用什么样的方法来让小视频在屏幕的一角播放 而不中断屏幕的其余部分 到目前为止 我们已经遇到了两种可行的解决方
  • 从 AVAudioRecorder 获取分贝

    我正在尝试从 AVAudio 录音机获取分贝值 这是我目前的代码 我有一个启动录音机的方法 然后是一个读取分贝值的方法 var recorder AVAudioRecorder 全局定义的记录器 然后在此处使用 func init reco
  • 使用 iPhone 控制蓝牙音频设备

    我正在寻找为 iPhone 编写应用程序 它将能够控制汽车中的收音机和 CD 播放器 收音机和播放器具有可用的蓝牙连接 我开始这个问题是为了获得这个地方所需的所有信息 我有几个问题 但如果您发现任何我没有要求的对我开始开发此应用程序不重要的
  • 在 SwiftUI 中,如何执行手势但将手势转发到其后面的视图?

    我正在创建一个工具提示系统 如果用户触摸工具提示之外的任何地方 我想关闭工具提示 我希望这样在工具提示之外的触摸既可以消除工具提示 又可以激活用户点击的任何控件 因此 您可以打开一个工具提示 然后仍然单击工具提示外部的按钮 并在第一次点击时
  • NSString 到 NSDate 的转换得到错误的结果[重复]

    这个问题在这里已经有答案了 可能的重复 NSDateFormatter 的时间错误 https stackoverflow com questions 5466419 wrong time from nsdateformatter NSDa
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • xcode“将源编译为”覆盖特定文件

    我有一个项目 必须将 编译源为 值设置为 Objective C 不 根据文件类型 在我的主项目中不起作用 我从框架 特别是 OpenFeint 获得的文件有问题 该文件在编译为 Objective C 时出现编译错误 error poin
  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • 从 plist 文件中解码数据

    我丢失了在 Macbook Air 上用 Textwrangler 编写的文本文件中的一些数据 我在扩展名为 plist 的文件中找到了其中一些 文件是用 xml 编写的 如下所示
  • 返回一个dispatch_async获取的变量[重复]

    这个问题在这里已经有答案了 基本上 一个方法需要返回一个在dispatch async中获取的NSDictionary 这是我尝试过的 NSDictionary fetchNSDictionary dispatch queue t Queu
  • 如何从 UILabel 创建图像?

    我目前正在 iPhone 上开发一个简单的类似 Photoshop 的应用程序 当我想要展平图层时 标签位于良好的位置 但字体大小不佳 这是我要展平的代码 UIGraphicsBeginImageContext CGSizeMake wid
  • iOS JPEG 图像旋转 90 度

    我正在使用选择器视图从相册中选择图像 我使用上面的代码 void imagePickerController UIImagePickerController picker didFinishPickingMediaWithInfo NSDi
  • SwiftUI - 从 NSObject 继承的 ObservableObject 在 iOS 13 中不会更新

    我知道 这是 无法在 iOS XX 中工作 问题之一 但我完全陷入困境 所以我有一个ObservableObject继承自的类NSObject 因为我需要听委托方法UISearchResultsUpdating class SearchBa
  • 使用 NSFileHandle 覆盖数据

    使用 NSFileHandle 使用 truncateFileAtOffset 从文件末尾删除 n 个字符非常容易 void removeCharacters int numberOfCharacters fromEndOfFile NSF
  • GoogleSignIn ios 附加到谷歌表格

    我目前正在开发一个 iOS 应用程序 该应用程序需要写入登录用户拥有的 Google 工作表 要登录我正在使用的用户GoogleSignInpod 并附加到我正在使用的谷歌表GoogleAPIClientForREST Sheets pod
  • 是否可以在增强现实应用程序中使用自定义 iOS UI 元素(例如 UILabel)

    我想知道是否可以使用像这样的 UI 元素UIButton UILabel在带有 ARKit 的增强现实应用程序中 如果您也对 UIView 子类的透明度模式感兴趣 请尝试我的示例https github com erikhric ar me

随机推荐

  • 如何防止 WCF 服务进入故障状态?

    我有一个 WCF 服务不应进入故障状态 如果出现异常 则应将其记录下来 并且服务应继续不间断 该服务具有单向操作契约 并且正在从 MSMQ 读取消息 我的问题有两个 该服务似乎正在被吞噬 异常 错误 所以我无法 调试它 我如何获得服务 暴露
  • 从 Google 云端硬盘文件夹中删除旧文件

    我创建了这个脚本来删除 3 个多小时前发布的文件 而且即使最新文件超过 3 小时 也不会被删除 因此该文件夹永远不会为空 我启用了谷歌的高级服务 称为 DRIVE API V2 我激活了一个触发器 每 5 分钟分析一次文件夹 但文件通常不会
  • “此哈希方法尚未发现冲突”是什么意思?

    我的意思是我不需要寻找实际的碰撞 就知道它们的存在 如果没有冲突 那么如何获得固定长度的结果呢 这就是为什么我不明白人们声称 md5 不安全 是什么意思 有人发现了碰撞 或者类似的东西 我唯一能想到的是 碰撞搜索仅查找字典单词 例如 如果
  • 如何知道已保存模型中的输出和输入张量名称

    我知道如何加载已保存的 TensorFlow 模型 但如何知道输入和输出张量名称 我可以使用 tf import graph def 加载 protobuf 文件 然后使用函数 get tensor by name 加载张量 但我如何知道任
  • 如何在 CLion 中运行 SFML,错误未定义引用?

    我是 C 新手 尝试学习游戏编程 我选择 SFML 并在 Jetbrain 的 CLion 上运行并使用 Ubuntu 机器 我按照这个教程SFML 和 Linux http sfml dev org tutorials 2 0 start
  • Primefaces 嵌套对话框/'appendToBody' - 支持 bean 操作未触发

    我在两个嵌套表单中有一个支持 bean 方法 会话范围 该方法不会触发 我用一个展示问题的通用示例提出了这个问题 我希望了解如何 为何使用表单 对话框和appendToBody标签导致了问题 为了澄清 该行动contentsOfDialog
  • 如何阻止 Eclipse 每次重新启动时累积 Tomcat 实例?

    我在 Eclipse 2019 3 中运行 Tomcat 8 5 每次我通过单击绿色圆圈 三角形按钮重新启动 Tomcat 实例时 最终都会运行重复的实例 我怎样才能阻止这种情况发生 这是我已经尝试过的一些事情 我尝试升级到tomcat 9
  • PostgreSQL 9.3:将一列拆分为多列

    我想拆分一列colb在下面给出的示例中分为两列 喜欢column1 and column2 我有一个包含两列的表 Example create table t3 cola varchar colb varchar 插入 insert int
  • 在 Angular 中动态设置样式

    我有以下标记 tr style background color none tr 正如它所说 如果activity status字段待定 然后将背景颜色设置为红色 否则设置为绿色 但这不起作用 检查后我发现它呈现如下 tr style ba
  • C# - 编写 COM 服务器 - 映射到方法的属性

    我们正在尝试替换最初为 VB6 应用程序编写的 COM 服务器 我们无法访问源代码 由于某种原因 VB6 应用程序可以调用我们的构造函数 但随后它会得到 系统错误 H80004002 没有这样的 接口支持 我假设当它尝试使用 QueryIn
  • Magento - 致命错误:类名必须是有效的对象或字符串

    我在安装 Magento 时遇到问题 希望有人能帮助我解决 当我访问该网站时 我突然开始收到以下错误消息 Fatal error Class name must be a valid object or a string in app co
  • 科学记数法中的小“e”/Matlab中的Double是什么

    当我计算一个非常小的数字时 matlab给出 1 12345e 15这是什么 我可以将其解释为 1 12345 10 15 或其 1 12345 e 15 我很着急 抱歉问了这个愚蠢的问题 e 代表指数 它的科学计数法 http en wi
  • Crontab 格式化 - 每 15 分钟一次

    我试图让一个简单的 crontab 作业每 15 分钟运行一次 但在决定如何格式化计时时遇到困难 我一直在写的内容如下 15 我很确定这只运行每小时的前 15 分钟 我认为 crontab 允许用户指定确切的运行时间 即 0 15 30 4
  • 从主题读取后立即异步提交消息

    我正在尝试在阅读主题后立即提交一条消息 我已点击此链接 https www confluence io blog apache kafka spring boot application https www confluent io blo
  • 如何在drawString Java中更改字体大小

    如何让字体变大g drawString Hello World 10 10 g setFont new Font TimesRoman Font PLAIN fontSize 其中 fontSize 是一个 int 这绘制字符串的API h
  • 异步运行一些 Python 代码的正确方法是什么?

    我需要从我的普通 Flask 应用程序发送邮件 所以我认为最简单的方法是使用 smtplib 发送邮件 但我必须异步执行 你不能只在请求中插入 3 秒的延迟 对吧 因此 我将电子邮件添加到队列 psql 表 中 并从读取该表并使用 smpt
  • 如何在 R 中创建具有特定 MA(或 q)项的 ARIMA 模型

    我无法确定使用 arima stats 创建 ARMA 模型的特定方法 该模型具有特定的 MA 项 而这些项不仅仅由最大数指定 我的意思是 我需要指定一个 AR 1 MA 1 4 模型 该模型应该产生截距 AR1 项 MA1 项和 MA4
  • 将视频保存到 CameraRoll React-Native

    可以使用cameraRoll在React Native上保存视频 对于使用saveImageWithTag 的图像 这很容易 但我找不到视频文档 将视频保存到相机胶卷非常容易 我使用以下代码行完成了它 saveVideoToCameraRo
  • 对数据框中的列中的数据进行分类

    我的数据框中有一列数字 我想将这些数字分类为例如高 低 排除 我该如何做到这一点 我一无所知 我尝试查看剪切函数和类别数据类型 一个简短的例子pd cut 让我们从一些数据框开始 df pd DataFrame A 0 8 2 5 9 15
  • 点击 wkwebview 链接时不会打开

    我正在开发一个应用程序 其中一些代码继承自其他开发人员 并具有加载 html 文件的 Web 视图 html 文件中包含电话号码和网页链接 如果长按电话号码将会打开 但 html 链接不会打开 我希望它们通过短按打开 但短按什么也没有发生