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

IOS - WKWebview在第二次单击同一按钮时在decidePolicy中获取空url

IOS - WKWebView是一种用于在iOS应用程序中显示Web内容的组件,而WKWebView的decidePolicy方法是一个代理方法,用于在加载请求前判断是否允许加载。在第二次单击同一按钮时,在decidePolicy方法中获取到的url可能为空。

WKWebView是苹果推出的替代UIWebView的新一代WebView组件,具有更快的性能和更好的稳定性。它支持现代Web标准,并提供了强大的JavaScript交互能力和高度可定制的界面。

在使用WKWebView时,我们可以通过实现WKNavigationDelegate的decidePolicy方法来拦截加载请求并作出判断。当用户点击某个按钮时,可以在decidePolicy方法中获取到即将加载的请求的URL,进行相关处理。

然而,在第二次单击同一按钮时,可能会出现获取到空URL的情况。这是因为当第一次点击按钮后,页面开始加载,并且decidePolicy方法也开始执行。而在第二次单击按钮时,由于页面还在加载中,decidePolicy方法可能会在第一次加载完成之前被再次调用。这时获取到的URL可能是空的。

为了解决这个问题,我们可以在decidePolicy方法中进行空URL的判断,避免对空URL进行处理或者执行其他逻辑。可以使用以下代码示例:

代码语言:txt
复制
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if let url = navigationAction.request.url {
        // 判断URL是否为空
        if url.absoluteString.isEmpty {
            // 空URL处理逻辑
            decisionHandler(.cancel)
            return
        }
        
        // 其他处理逻辑
        // ...
    }
    
    decisionHandler(.allow)
}

总结:

  • IOS - WKWebView是iOS应用程序中用于显示Web内容的组件。
  • decidePolicy是WKNavigationDelegate的代理方法,用于拦截加载请求并作出判断。
  • 在第二次单击同一按钮时,在decidePolicy方法中获取到的URL可能为空。
  • 可以通过在decidePolicy方法中判断URL是否为空来避免处理空URL。
  • 以上是答案内容,有关IOS - WKWebView和WKNavigationDelegate更详细的信息,以及腾讯云相关产品介绍,可以参考腾讯云官方文档或其它相关资源。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Hybrid App 应用 开发 9 个必备知识点复习(WebView 调试 等)

不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,两个平台上支持同一套 API。...但是目前 IOS10 以下的系统以及很少了, 小结: WKWebView 相较于 UIWebView 整体上有较大的提升,满足 iOS 上面使用同一套控件的功能,同时对整个内存的开销以及滚动刷新率和... WKWebView 白屏的时候,另一种现象是 webView.titile 会被置, 因此,可以 viewWillAppear 的时候检测 webView.title 是否为来 reload...为了避免每次调试看到此警告,勾选“总是允许从这台计算机”,并单击“确定”。...DebugGap 1.4电脑端远程 DebugGap 将检测即将到来的客户端,开发人员可以单击每个客户端进行调试。 DebugGap 七、 iOS 平台下如何调试 WebView?

3.1K00

【Hybrid】288- Hybrid App 应用开发 9 个必备知识点复习

不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,两个平台上支持同一套 API。...但是目前 IOS10 以下的系统以及很少了, 小结: WKWebView 相较于 UIWebView 整体上有较大的提升,满足 iOS 上面使用同一套控件的功能,同时对整个内存的开销以及滚动刷新率和...为了避免每次调试看到此警告,勾选“总是允许从这台计算机”,并单击“确定”。...安装完成后,运行 DebugGap ,开始配置: 通常情况下, DebugGap 可以自动获取IP,并设置默认的端口,如果没有,你可以手动设置; 点击“连接”按钮启动各种客户端的侦听器; 2.2 客户端上配置...1.4电脑端远程 DebugGap 将检测即将到来的客户端,开发人员可以单击每个客户端进行调试。 六、 iOS 平台下如何调试 WebView?

2.3K20
  • Hybrid App 应用开发 9 个必备知识点复习

    不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,两个平台上支持同一套 API。...但是目前 IOS10 以下的系统以及很少了, 小结: WKWebView 相较于 UIWebView 整体上有较大的提升,满足 iOS 上面使用同一套控件的功能,同时对整个内存的开销以及滚动刷新率和... WKWebView 白屏的时候,另一种现象是 webView.titile 会被置, 因此,可以 viewWillAppear的时候检测 webView.title 是否为来 reload 页面...为了避免每次调试看到此警告,勾选“总是允许从这台计算机”,并单击“确定”。...1.4电脑端远程 DebugGap 将检测即将到来的客户端,开发人员可以单击每个客户端进行调试。 六、 iOS 平台下如何调试 WebView?

    2.7K20

    Hybrid App 应用开发 9 个必备知识点复习

    不过苹果在 iOS8 以后推出了 WKWebView 来加载 Web,并应用于 iOS 和 OSX ,它取代了 UIWebView 和 WebView ,两个平台上支持同一套 API。...但是目前 IOS10 以下的系统以及很少了, 小结: WKWebView 相较于 UIWebView 整体上有较大的提升,满足 iOS 上面使用同一套控件的功能,同时对整个内存的开销以及滚动刷新率和...为了避免每次调试看到此警告,勾选“总是允许从这台计算机”,并单击“确定”。...安装完成后,运行 DebugGap ,开始配置: 通常情况下, DebugGap 可以自动获取IP,并设置默认的端口,如果没有,你可以手动设置; 点击“连接”按钮启动各种客户端的侦听器; 2.2 客户端上配置...1.4电脑端远程 DebugGap 将检测即将到来的客户端,开发人员可以单击每个客户端进行调试。 六、 iOS 平台下如何调试 WebView?

    2.3K30

    WKWebView详解

    您可以使用WKWebView类来应用程序嵌入web内容,通过创建一个WKWebView对象,将其设置为视图,并发送一个请求来加载web内容。...从iOS 8.0和OS X 10.10开始,建议使WKWebView应用程序展示web内容,建议不要使用UIWebView或WebView。...; iOS上,这个属性只支持3D Touch的设备上支持 iOS 10及以后的系统版本默认值是YES,之前的默认值是NO 如果将该属性的值设置为YES,则iOS用户可以按下链接来预览链接,并可以检测到地址和电话号码等数据...WebView用户界面通过实现这个协议来控制新窗口的打开,增强用户单击元素显示的默认菜单项的表现,并执行其他用户界面相关的任务。这些方法可以通过处理JavaScript或其他插件内容来调用。...的调用 如果要使用默认预览操作,应用程序必须在返回的视图控制器的previewActionItems实现运行这些操作 iOS 10.0+预览用户触发pop操作(继续按压)时调用 - (void)webView

    20.6K193

    IOS WebView控件详解

    概述 WebView就是一个内嵌浏览器控件,iOS主要有两种WebView:UIWebView和WKWebView,UIWebView是iOS2之后开始使用,WKWebViewiOS8开始使用,...方法,一共有4个方法需要注意: //是否允许加载网页,也可获取js要打开的url,通过截取此url可与js交互 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest...JS执行OC代码 JS是不能执行OC代码的,但是可以变相的执行,JS可以将要执行的操作封装到网络请求里面,然后OC拦截这个请求,获取URL里面的字符串解析即可。...WKWebViewiOS8出的一个新控件,算是对UIWebVeiw的升级版。...decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler; /* 4.开始获取到网页内容返回

    4.8K80

    JSB 原理与实践

    由于历史原因,安卓和 iOS 均有高低两套版本的 WebView 内核: 平台和版本 WebView 内核 iOS 8+ WKWebView iOS 2-8 UIWebView Android 4.4+...可以拿到 JS 执行完毕的返回值 实践 下面我们通过一个小 Demo 来看一下 iOS 端实现 Native 向 Web 端发消息的实际效果: (本文所有 Demo 均运行在 iOS14.5 模拟器...,WebView 容器采用 WKWebView 内核) 页面上半部分的 UI 是由 HTML + CSS 渲染所得,是一个纯静态的 webpage,中间的输入框和按钮是 Native 原生控件,直接覆盖...可以看到当我们文本框输入下列字符并点击按钮后,h5 页面 id 为 test 的 p 标签内容被修改了。...,曾经是最主流的 JSB 实现方案,但目前高版本的系统已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送可能会造成消息丢失(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL

    3.3K40

    JSB 原理与实践

    由于历史原因,安卓和 iOS 均有高低两套版本的 WebView 内核: 平台和版本 WebView 内核 iOS 8+ WKWebView iOS 2-8 UIWebView Android 4.4+...可以拿到 JS 执行完毕的返回值 实践 下面我们通过一个小 Demo 来看一下 iOS 端实现 Native 向 Web 端发消息的实际效果: (本文所有 Demo 均运行在 iOS14.5 模拟器...,WebView 容器采用 WKWebView 内核) 页面上半部分的 UI 是由 HTML + CSS 渲染所得,是一个纯静态的 webpage,中间的输入框和按钮是 Native 原生控件,直接覆盖...可以看到当我们文本框输入下列字符并点击按钮后,h5 页面 id 为 test 的 p 标签内容被修改了。...,曾经是最主流的 JSB 实现方案,但目前高版本的系统已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送可能会造成消息丢失(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL

    1.4K10

    JSB 原理与实践

    由于历史原因,安卓和 iOS 均有高低两套版本的 WebView 内核: 平台和版本 WebView 内核 iOS 8+ WKWebView iOS 2-8 UIWebView Android 4.4+...可以拿到 JS 执行完毕的返回值 实践 下面我们通过一个小 Demo 来看一下 iOS 端实现 Native 向 Web 端发消息的实际效果: (本文所有 Demo 均运行在 iOS14.5 模拟器...可以看到当我们文本框输入下列字符并点击按钮后,h5 页面 id 为 test 的 p 标签内容被修改了。...敏锐同学到这一步其实就已经知道我们日常使用 JSB 客户端是如何调用前端 JS 代码了,我们刚刚的静态 html 文件添加几行 JS 代码: function evaluateByNative(...,曾经是最主流的 JSB 实现方案,但目前高版本的系统已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送可能会造成消息丢失(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL

    1.3K30

    WKWebView 那些坑

    WKWebView 中加载下面的测试链接可以稳定重现白屏现象: http://people.mozilla.org/~rnewman/fennec/mem.html 这个时候 WKWebView.URL...,我们该函数里执行[webView reload](这个时候 webView.URL 取值尚不为 nil)解决白屏问题。...WKWebView白屏的时候,另一种现象是 webView.titile 会被置, 因此,可以 viewWillAppear 的时候检测 webView.title 是否为来 reload 页面...实践发现 WKWebView 实例其实也会将 Cookie 存储于 NSHTTPCookieStorage ,但存储时机有延迟,iOS 8上,当页面跳转的时候,当前页面的 Cookie 会写入 NSHTTPCookieStorage...接入 now 直播的时候,我们发现在 iOS 9 上 WKWebView 会出现页面被拉伸变形的情况,最后发现是window.innerHeight值不准确导致(WKWebView上返回了一个非常大的值

    4.6K130

    WKWebView 白屏问题

    1、WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程执行。... WKWebView 中加载下面的测试链接可以稳定重现白屏现象: http://people.mozilla.org/~rnewman/fennec/mem.html 这个时候 WKWebView.URL...:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0)); 当 WKWebView 总体内存占用过大,页面即将白屏的时候,系统会调用上面的回调函数...,我们该函数里执行[webView reload](这个时候 webView.URL 取值尚不为 nil)解决白屏问题。...WKWebView白屏的时候,另一种现象是 webView.titile 会被置, 因此,可以 viewWillAppear 的时候检测 webView.title 是否为来 reload 页面

    4.4K20

    iOS小技能:WKWebView与JS的交互

    前言 由于目前UIWebView 已经被抛弃了,因此推荐使用WKWebView的WKScriptMessageHandler实现iOS与JS交互 WKWebView是AppleiOS8推出的Webkit...:-viewWillAppear:方法执行add 监听,-viewWillDisappear:方法执行remove 监听。...+ params; } 2.2 获取网页title 获取网页title: 加载请求完成才执行 //!...大图浏览器 ImageZoomScale:iOS 利用UIScrollView实现 图片放大预览,并支持缩小 iOS查看大图浏览器(应用场景:查看风险商户证明材料图片支持滑动切换) [video(...UIProcess进程:主要负责与 WebContent 进行交互,与 APP 同一进程,可以进行 WebView 的功能配置,并接收来自 WebContent 进程的各类消息,配合业务代码执行任务的决策

    6.7K30

    wkwebview加载完成_【Swift】WKWebView与JS的交互使用

    二、WKWebView 支持更多的HTML5的特性 高达60fps滚动刷新频率与内置手势 与Safari相容的JavaScript引擎 性能、稳定性方面有很大提升占用内存更少 协议方法及功能都更细致...可获取加载进度等。...接口的实现,需要有提示信息以及两个相应事件, 确认及取消,并且completionHandler回传相应结果,确认返回YES, 取消返回NO //参数 message为 js 方法 confirm...接口的实现,默认需要有一个输入框一个按钮,点击确认按钮回传输入值 //当然可以添加多个按钮以及多个输入框,不过completionHandler只有一个参数,如果有多个输入框,需要将多个输入框的值通过某种方式拼接成一个字符串回传...因为当我们获取 JSContext 获取到的 JSContext 从属于一个 JSVirtualMachine。

    5.7K00

    Flutter 与 iOS 原生 WebView 对比

    iOS 中使用的是 WKWebView)的加载速度,内存使用情况。...测试手机:iPhoneX 系统:iOS12.0 加载速度对比 测试网页打开的速度,只需要获取 WebView 开始加载网页和网页加载完成的时间戳,时间戳的差即为打开网页的时间。...> UIWebView > flutter_webview 占用内存对比 这里查看内存使用的是 Xcode 的 debug session 的 memory,首先看之前测试,连续打开十次新浪的内存情况...结论:内存 WKWebView > flutter_webview > UIWebView HTML5 兼容性对比 可以 html5test 对浏览器的兼容性进行评分,通过测试发现得分分别如下: 因为...是比UIWebView更好的选择,推荐使用; flutter_webView_plugin:iOS中使用的就是原生的WKWebView,所以总体和 native WKWebView 表现差不多。

    1.6K20

    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...:%@", _webView.backForwardList.forwardItem.URL);//列表条目的标题及url } 7、goToBackForwardListItem:返回某个历史页面

    6K21
    领券