首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在SwiftUI中使用WKWebView时如何截取链接导航?

在SwiftUI中使用WKWebView时,可以通过实现WKNavigationDelegate协议中的方法来截取链接导航。具体步骤如下:

  1. 首先,创建一个遵循WKNavigationDelegate协议的类,并实现其中的方法。例如,可以创建一个名为WebViewDelegate的类。
代码语言:txt
复制
import WebKit

class WebViewDelegate: NSObject, WKNavigationDelegate {
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        // 在这里进行链接导航的处理
        // 可以通过navigationAction.request.url获取导航链接的URL
        // 根据需要进行判断和处理
        // 最后调用decisionHandler告诉WebView是否允许导航
    }
}
  1. 在使用WKWebView的地方,创建一个WebViewDelegate的实例,并将其设置为WKWebView的navigationDelegate。
代码语言:txt
复制
import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    let webView = WKWebView()
    let delegate = WebViewDelegate()

    func makeUIView(context: Context) -> WKWebView {
        webView.navigationDelegate = delegate
        return webView
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        // 更新WebView的内容
    }
}
  1. 在WebViewDelegate的webView(_:decidePolicyFor:decisionHandler:)方法中,可以根据navigationAction.request.url获取导航链接的URL,并根据需要进行判断和处理。最后,调用decisionHandler告诉WebView是否允许导航。
代码语言:txt
复制
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if let url = navigationAction.request.url {
        // 在这里进行链接导航的处理
        // 可以根据url进行判断和处理
        // 例如,可以截取某些特定链接进行自定义操作
        if url.absoluteString.contains("example.com") {
            // 执行自定义操作
            // ...
            
            // 不允许导航
            decisionHandler(.cancel)
            return
        }
    }
    
    // 允许导航
    decisionHandler(.allow)
}

这样,在SwiftUI中使用WKWebView时,就可以通过实现WKNavigationDelegate的方法来截取链接导航,并根据需要进行自定义操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS监听H5页面goBack返回事件 & 网页监听APP返回键 (NavigationBackItemInjection)

截取当前显示屏幕WKWebView UINavigationBarDelegate NavigationType Disable all the '_blank' target in page's...target WKWebView的WKNavigationDelegate代理方法处理应用跳转 简单的处理WKWebView加载新页面 WKWebView显示JS弹框 WKWebView调用js方法...监听 estimatedProgress 引言 需求:原生app使用WebView 控制器加载H5页面进行信用卡申请 问题:用户点击残忍放弃之后,没有关闭当前控制器 重现场景:用户点击返回按钮,暂时提示框...解决方案: 1、iOS监听H5页面goBack返回事件 2、直接使用Safari打开URL 相关文章: iOS 封装WebView 控制器https://kunnan.blog.csdn.net/article...back-forward列表的内容,相当于回到关闭的之前看过的详情界面。

6K21
  • WKWebView

    2,截屏捕获WKWebView上会随机失败,因此,如果截屏的API是App的关键操作,那么建议使用现有的UIWebView浏览引擎。...当用户不能在某个方向上再移动使用canGoBack或者canGoForward来禁用按钮。 默认情况下,Web视图会自动将出现在Web内容的电话号码转换成电话链接。...当电话链接被点击,电话应用程序就会启动并拨打该号码。...布尔值,用于确定是否按下连接可以显示链接目标的预览。 - goBack。导航到后退列表的后腿项。 - goForward。导航到后退列表的前进项。...当使用 Https 协议加载web内容使用的证书不合法或者证书过期需要使用该方法. - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge

    6K20

    肘子的 Swift 周报 #043| 记忆归档和唤醒

    前一期内容|全部周报列表 原创 如何SwiftUI 中平铺图片[3] Fatbobman( 东坡肘子 )[4] “这题我会!”。我想,看到本文标题,这恐怕是大多数人的第一反应。...本文中,我们将探讨两种不同的图片平铺实现方式,并由此引申出一种 SwiftUI 较少使用的 Image 构建方法。...iOS WKWebView 页面与档案资源 Preload 预载 / Cache 缓存研究[9] ZhgChgLi[10] 本文中,ZhgChgLi 探讨了 iOS 开发中使用 WKWebView 的页面预加载和缓存策略...文章详细介绍了 HTTP 缓存机制,并分析了多种可能的预加载和缓存方案,包括完善 HTTP 缓存、WKWebView 预加载、使用 URLProtocol 和 WKURLSchemeHandler 等。...这一限制实际上阻碍了持续集成 (CI)环境中进行性能测试的可能性。本文中,Alexey Alter-Pesotskiy 探讨了如何克服这一挑战, CI 环境实现 iOS 性能测试。

    8810

    iOS开发----JavaScriptCore、UIWebView及WKWebView交互的那些事

    分别使用 UIWebView 以及 WKWebView 实现效果如下: JavaScriptCore 类库里面有12个类(还有两个是负责导入相关类的头文件以及一个关于WebKit的宏定义);基本的交互过程...,其实最常使用的有三个:JSContext、JSValue、JSExport JSContext 简单的理解为执行JavaScript的一个环境,就好像我们绘制View时候需要获取的CGContext...JavaScript的逻辑如下: 确认当前使用的是 UIWebView还是 WKWebView,并通过变量 ritl_type确定 点击按钮,根据类型执行不同的操作 客户端通过执行 iosTellSomething...UIWebViewDelegate UIWebViewDelegate 的webViewDidFinishLoad() 方法对JSContext进行截取,并执行操作: WKWebView 首先有一点...添加JavaScript交互 WKNavigationDelegate告知web当前使用webView的类型: 履行WKScriptMessageHandler协议,完成交互操作即可 最后记得移除哦

    1.5K20

    UI篇- UIWebView使用大全

    ,不做深究 WKWebView是iOS8推出的,算是UIWebVeiw的升级版。...API OC调用JS方法 与UIWebView进行交互,调用web页面的需要传参的函数,参数需要带单引号,或者双引号(双引号需要进行转义转义字符前加\),传递json字符串不需要加单引号或双引号...OC给JS传参数,如何在OC获取到JS传递过来的参数 如果要实现这样的JS和OC的数据交互,需要使用到一个第三方文件:WebViewJavascriptBridge 给web发消息 @property...如何消除Web Alert弹框中出现的网址 ? 这里解决的方法是通过使用 WKWebView 的方法。...UIWebView iOS11使用。 ? UIWebView iOS 11上 当顶部的 y值设为 0 ,是依然无法盖住UIStatusBar区域的,但是滚动就会出现问题了。

    2K10

    WKWebView使用

    WKWebView使用 前言 最近项目中的UIWebView被替换为了WKWebView,因此来总结一下WKWebView使用。...示例Demo:WKWebView使用 本文将从以下几方面介绍WKWebView: 1、WKWebView涉及的一些类 2、WKWebView涉及的代理方法 3、网页内容加载进度条的实现 4、JS...,需要在block把用户选择的情况传递进去 - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString...需要在block把用户输入的信息传入 - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString...文本编辑偏好设置.png 详情请前往我的Github:WKWebView使用 如果我WKWebView使用的总结没帮到你,你也可以看看下面几篇文: https://www.jianshu.com/p

    2.9K61

    分享超详细 WKWebView 开发和使用经验

    WKWebView 几个不常用的特性 WKWebview 加载过程的性能指标图解 WKWebview 秒开的实践及踩坑之路 今天分享的这篇文章全面的介绍了 WKWebView,作者根据开发和使用经验从属性...didFailProvisionalNavigation 当容器开始加载数据 当网页内容开始主 Frame 开始渲染 提交主 Frame 导航期间发生了错误 当接受 HTTPS 请求证书后执行 当容器内容发生崩溃...存储 WKWebsiteDataStore 以下情况WKWebView 主动发送请求不会携带 cookie。...Ajax 请求不会带上 Response Set-Cookie 的值 302 跳转不会带上 Response Set-Cookie 的值 可以使用 iOS11 的新 API 对 WKWebView...提交主 Frame 导航期间发生了错误 didFailNavigation,例如: window.open("http://abcd") // 发生失败后会走该回调 当接受 HTTPS 请求证书后执行

    4.9K30

    iOSWebKit框架应用与解析 原

    iOSWebKit框架应用与解析 一、引言         iOS8之前,应用嵌入网页通常需要使用UIWebView这样一个类,这个类通过URL或者HTML文件来加载网页视图,功能十分有限,只能作为辅助嵌入原生应用程序...WebKit框架添加了一些原生与JavaScript交互的方法,增强了网页视图与原生的交互能力。并且WebKit框架采用导航堆栈的模型来管理网页的跳转,开发者也可以更加容易的控制和管理网页的渲染。...二、WebKit框架概览         WebKit框架涉及的类很多,框架的设计十分面向对象和模块化,开发者使用时可以轻松的写出结构清晰的代码。...三、使用WKWebViewConfiguration对WebView进行配置         使用下面的代码可以创建一个WKWebView视图,创建WebView视图,需要使用WKWebViewConfiguration...JavaScript调用的方法需要设置代理,不需要需要将代理移除,WKUserContentController也提供了移除这个代理的方法,如果不移除,将会造成WebView不能释放。

    1.9K40

    Ask Apple 2022 与 SwiftUI 有关的问答(上)

    使用 environmentObject 的情况下,如何避免创建实例的视图被重新计算Q:如何在避免重新计算顶层视图 body 的情况下,不同子树的两个子视图之间共享状态( 例如 ObservableObject...DocumentGroupQ: macOS 上使用 SwiftUI 应用生命周期和 DocumentGroup ,如果应用仅为数据阅读器,是否可以禁止创建新文件?...通用导航模型Q:我们正在使用带有路径参数的 NavigationStack,但当用户 stage manager 把窗口的大小从 Regular 调整为 Compact ,我们 “转换” 路径方面遇到了麻烦...但是从一个文本字段到下一个文本字段的聚焦感觉不够流畅,而且每当我一个文本字段输入一个字母,我的 CPU 使用率似乎会飙升到 70% — 100%。...image-20221022135326560San Francisco 宽度风格Q:如何SwiftUI 如何使用 SF 字体家族新增的三种宽度风格( Compressed、Condensed、Expanded

    12.3K20

    苹果全新UI框架来了!可视化编程,自动化减少20%代码量

    那么,SwiftUI解决了哪些痛点?带来哪些好处?代码风格如何?敬请阅读本文。 刚刚结束的苹果WWDC推出了一个对于开发者非常重要的框架:SwiftUI。...目前TOIBE排名18位: ? RedMond排名11 ? SwiftUI还提供对动态类型、暗黑模式、本地化和可访问性的自动支持。 SwiftUI都更新了什么?...比如在使用源码控制就很麻烦,会导致代码和可视化布局之间移动变得非常困难;使用动作和outlets过于依赖flaky系统的连接。...outlets和操作,都会在编译进行检查,因此在运行时不会出现UI失败的风险 虽然背后使用来自UIKit和AppKit的控件,但SwiftUI凌驾于二者之上,能够有效地使底层UI框架成为一个实现细节,...你对SwiftUI有哪些期待呢?敬请留言吧! 参考链接: https://github.com/Jinxiansen/SwiftUI/blob/master/README_CN.md

    5.4K20

    技术 | 从零开始,实现你的小程序

    通过观察,小程序的渲染与逻辑是分离开的,这一点上,我个人的判断是限制开发者的编写来达到程序体验的提升,既然分离,那么重点肯定就在通信上了,以iOS的角度来分析,UI的落地呈现使用WKWebView,那么...链接WKWebView:https://developer.apple.com/reference/webkit/wkwebview JavaScriptCore:https://developer.apple.com.../reference/javascriptcore 通信的目的是让WKWebView渲染的视图可以和在JavaScriptCore运行的逻辑可以“绑定”起来,这里重要的是如何定义通信的协议和数据结构...Navigate类的特点非常类似NavigationController,一个栈结构的导航类,一个Page呈现必然NavigationController的栈顶,当页面要退出,必然从栈顶移除此Page...那么Page逻辑类,你调用了setData方法来更新视图,该如何做呢?通过bridge将数据发送给WKWebView,wk的某个方法接收到了之后,启动diff,重新生成vdom,最后来更新视图。

    89730

    【visionOS】从零开始创建第一个visionOS程序

    页面链接探索新的交互方式 人们可以通过看着一个元素并轻敲手指来选择它。他们还可以使用特定的手势来缩放、拖动、缩放和旋转对象。...人们可以使用连接的鼠标、触控板或键盘与项目交互、触发菜单命令和执行手势。 构建并运行你的app页面链接 模拟器构建并运行你的应用,看看它看起来如何。...使用键盘和鼠标或触控板环境中导航并与应用程序交互。 点击并拖动应用程序内容下方的窗口栏,以重新定位窗口环境的位置。将指针移动到窗口栏旁边的圆圈上,显示窗口的关闭按钮。...当你准备界面显示3D内容使用RealityView。这个SwiftUI视图作为你的RealityKit内容的容器,并允许你使用熟悉的SwiftUI技术更新内容。...人周围页面链接显示3D内容 当你需要更多地控制应用内容的位置,可以将内容添加到ImmersiveSpace。沉浸式空间为您的内容提供了一个无限的区域,您可以控制空间内内容的大小和位置。

    94740

    SwiftUI 4.0 的全新导航系统

    欢迎大家 Discord 频道[2] 中进行更多地交流 长久以来,开发者对 SwiftUI导航系统颇有微词。...⚠️ 使用堆栈管理系统的情况下,请不要在编程式导航混用声明式导航,这样会破坏当前的视图堆栈数据 下面的代码,如果点击声明式导航,将导致堆栈数据重置。...分栏布局 SwiftUI 4.0 之前的版本,可以这样使用 NavigationView 来创建拥有左右两个栏的编程式导航视图: class MyStore: ObservableObject {...macOS 上,detalOnly 不会起作用 如果想在 SwiftUI 4.0 之前的版本上使用类似的功能,可以参考我 用 NavigationViewKit 增强 SwiftUI导航视图[4]...相当一部分开发者由于版本适配的原因并不会使用新的 API ,因此,每个人都需要认真考虑如下问题: 如何从新 API 获得灵感 如何在老版本运用编程式导航思想 如何让新老版本的程序都能享受系统提供的便利

    10.3K62

    解析 SwiftUI 两处由状态更新滞后引发的严重 Bug

    这两个错误包括:通过手势取消 Sheet 后,快速右滑导航容器导致应用锁死;以及滚动返回上层视图导致应用崩溃。...原文发表我的博客 肘子的Swift记事本视图变化在前、状态变化在后 SwiftUI ,某些可编程控件执行一定的操作,会先更新视图,待视图变化完成后再修改与其对应的状态。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死这是一个 SwiftUI 所有版本存在的错误,你可以众多的论坛或聊天室里看到不少的开发者都在寻找解决方法。...我们遇到问题的两个场景,应用程序都恰好使用导航容器,并且通过特定的操作,使 RunLoop 处于了适合 AG 打包更新的状态。...由于返回上层视图,状态尚未更新,因此清理 AG (返回动画运行),会破坏应用程序的 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

    707110

    WKWebView详解

    您可以使用WKWebView类来应用程序嵌入web内容,通过创建一个WKWebView对象,将其设置为视图,并发送一个请求来加载web内容。...从iOS 8.0和OS X 10.10开始,建议使WKWebView应用程序展示web内容,建议不要使用UIWebView或WebView。...,估算的进度保持1.0,直到新的导航开始,这时估算的进度重置为0.0 支持KVO 是否页面内的所有资源都是通过安全链接加载的 @property(nonatomic, readonly) BOOL hasOnlySecureContent...native的全屏播放控件 你必须设置此属性以播放内联视频 当在iPhone的HTML文档添加视频元素,还必须包括playsinline属性 iOS 10.0之前创建的应用程序必须使用webkit-playsinline...(预览上拉可见),比如打开链接,添加到阅读列表,拷贝链接,共享。

    20.6K193

    SwiftUI TextField进阶——格式与校验

    SwiftUI修饰方法) 以上原则,SheetKit——SwiftUI模态视图扩展库[3]和用NavigationViewKit增强SwiftUI导航视图[4]均有体现。...如何在TextField实现格式化显示 现有格式化方法 SwiftUI 3.0,TextField新增了使用新老两种Formatter的构造方法。...如何在TextField屏蔽无效字符 现有屏蔽字符方法 SwiftUI,可以通过设置仅使用特定的键盘类型来实现一定程度上的录入限制。...如何在TextField检查内容是否符合指定条件 相较上述两个目标,SwiftUI检查TextField内容是否符合指定条件是相当方便的。...引用链接 [1] www.fatbobman.com: http://www.fatbobman.com [2] SwiftUI使用UIKit视图: https://www.fatbobman.com

    8.2K20

    用NavigationViewKit增强SwiftUI导航视图

    由于SwiftUI原生提供的导航手段能力有限,因此之前的版本,NavigationView总是使用的不是那么的顺手。...该扩展遵循以下几个原则: •非破坏性任何新添加的功能都不能影响当前SwiftUI提供的原生功能,尤其是不能影响例如Toolbar、NavigationLinkNavigationView的表现•尽可能便于使用仅需极少的代码便可使用新增功能...使用DoubleColoumnJustForPadNavigationViewStyle,iPhone Max横屏仍呈现StackNavigationViewStyle的式样。...[5],我希望iPad版本无论横屏或竖屏,都始终能够保持两栏显示的状态,且左侧栏不可隐藏。...如果你使用中发现问题或者有其他需求,请在Github上提交Issue或在我的博客留言。

    3.2K20

    架构之路 (五) —— VIPER架构模式(一)

    开始 首先看下主要内容: 本教程,您将了解如何SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行的iOS应用程序,来自翻译。...它包含在starter,因此您可以本教程结束完成应用程序。 这个示例使用的是Pixabay,这是一个获得许可的照片共享站点。要将图像拉入应用程序,您需要创建一个免费帐户并获得一个API密钥。...路由器Router处理屏幕之间的导航。这与SwiftUI不同,SwiftUI,视图显示任何新视图。...当您查看图表,您可以看到数据视图view和实体entities之间流动的完整路径。 SwiftUI有自己独特的做事方式。...当您将其放置NavigationView,该链接将成为一个按钮,将destination推送到导航堆栈上。 content块可以是任何一个SwiftUI视图。

    17.5K10
    领券