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

UIWebView:加载某些URL时未调用的webViewDidStartLoad/webViewDidFinishLoad委托方法

UIWebView是iOS平台上的一个视图控件,用于在应用程序中显示网页内容。它是基于Webkit引擎的一种浏览器控件,可以加载并显示网页、HTML文件、PDF文件等。

UIWebView提供了一系列的委托方法,用于监控网页加载过程中的各个阶段。其中,webViewDidStartLoad和webViewDidFinishLoad是两个常用的委托方法。

webViewDidStartLoad方法在开始加载网页时被调用,可以用于在加载开始前执行一些操作,比如显示加载指示器等。该方法的定义如下:

代码语言:swift
复制
func webViewDidStartLoad(_ webView: UIWebView)

webViewDidFinishLoad方法在网页加载完成后被调用,可以用于在加载完成后执行一些操作,比如隐藏加载指示器、获取网页内容等。该方法的定义如下:

代码语言:swift
复制
func webViewDidFinishLoad(_ webView: UIWebView)

然而,有些情况下,当加载某些URL时,UIWebView可能不会调用这两个委托方法。这可能是由于以下原因之一:

  1. 加载的URL是一个空白页或无效的URL,导致加载过程非常快速,委托方法没有被调用的机会。
  2. 加载的URL使用了重定向或框架嵌套等技术,导致委托方法的调用顺序发生变化或被覆盖。

在这种情况下,可以考虑使用UIWebView的其他委托方法来监控加载过程,如webView:shouldStartLoadWithRequest:navigationType:方法可以用于拦截网页请求、webView:didFailLoadWithError:方法可以用于处理加载失败的情况等。

腾讯云相关产品中,可以使用腾讯云移动浏览器(Tencent X5)来替代UIWebView。腾讯云移动浏览器是基于腾讯X5内核的浏览器解决方案,具有更好的性能和兼容性。您可以通过腾讯云移动浏览器SDK来集成该功能,详情请参考腾讯云移动浏览器产品介绍:腾讯云移动浏览器

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

相关·内容

iOS引入JavaScriptCore引擎框架(一)

但是apple官方并未提供相关的方法,不过这边难不倒某些人,有些人发现,通过KVC的方式可获取UIWebView对应的JSContext,方式如下[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext...我做过一个测试:首先在UIWebView的webViewDidStartLoad阶段创建JSContext并暴露oc端的方法,在加载一级页面时js正常调用oc的方法,而跳转到二级页面中却无法执行oc的方法...;而在webViewDidStartLoad阶段由于并未加载完js文件, 因此js层定义的函数在oc端无法执行。     ...其次,在webVIewDidFinishLoad阶段创建JSContext并透出oc方法,由于加载js阶段在webVIewDidFinishLoad阶段之前,因此一级页面js无法调用oc方法,但是二级页面同理也是如此...,但是由于js代码是在iOS的UI线程执行,因此为了让js可以调用oc方法,可以通过在js设置setTimeout来让任务放到执行队列的末端,先执行oc层的webVIewDidFinishLoad方法,

1.6K60
  • IOS JavaScriptCore 跳转失去对象和一些BUG总结

    ①  在webViewDidStartLoad注入    现象: 在UIWebView的webViewDidStartLoad阶段创建JSContext并暴露oc端的方法,在加载一级页面时js正常调用...oc的方法,而跳转到二级页面中却无法执行oc的方法;而在webViewDidStartLoad阶段由于并未加载完js文件, 因此js层定义的函数在oc端无法执行。    ...②在webVIewDidFinishLoad创建    现象:由于加载js阶段在webVIewDidFinishLoad阶段之前,因此一级页面js无法调用oc方法,但是二级页面同理也是如此   原因...: 如果JS的调用OC的方法,也就是在webview加载之前那就掉不起来。...js中的异步代码,通过这种方式可以完成js调用oc方法; 或者JS设置一个监听监听OC是否加载完成,如果完成就调用方法。

    81230

    IOS隐藏键盘

    最近遇到二个键盘会自动弹出的问题: 1、UIWebView加载网页后,点击网页内的链接在UIWebView内进行跳转时,键盘自动弹起; 2、调用选择照片时,iPod上选择照片后也会自动弹出键盘,比如从图库进到具体某个文件夹内...,或者再返回图库,直接点中照片然后编辑的时候,都会自动弹出; 问题一是这样处理的 - (void)webViewDidStartLoad:(UIWebView*)webView {     [activityIndicatorView...cancelButtonTitle:nil otherButtonTitles:@"OK", nil];     [alterview show];     [alterview release]; } 网页开始加载或加载结束时关闭键盘并发送关闭键盘的事件...,如果webViewDidFinishLoad()不被调用是因为uiwebview对象需要设置delegate为self。...] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; } 因为接触ios也不算特别多,暂时就使用了上述的方法来处理了

    1.3K20

    UIWebView 浏览器控件一、初始化与三种加载方式二、常用属性和方法三、代理方法 UIWebViewDelegate四、其它案例:

    一、初始化与三种加载方式 UIWebView继承于UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 1.第一种: - (void)loadRequest...:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,例如加载百度的主页 UIWebView * view...UIWebViewDelegate 1.每当webView发送一个请求之前都会先调用这个方法,监听准备加载内容时调用,通过判断请求等参数来返回不同返回值判断是否加载该网页,是JS中执行OC代码的桥梁...WebView上 2.开始加载时调用的方法 - (void)webViewDidStartLoad:(UIWebView *)webView; 3.网页加载完毕执行的方法,一般在里面执行JS代码(删除一些节点...stringByEvaluatingJavaScriptFromString:js];} 补充:用JS删除,浏览器的console中调试 (1)按标签名删除 (2)按类删除 4.加载失败时调用的方法

    1.5K60

    iOS学习巩固笔记-UIWebViewJavaScript

    的加载过程 成为UIWebView的代理,遵守UIWebViewDelegate协议,就能监听UIWebView的加载过程 - (void)webViewDidStartLoad:(UIWebView...*)webView; 请求完毕(加载数据完毕)时调用这个方法 - (void)webViewDidFinishLoad:(UIWebView *)webView; 请求错误时调用这个方法 - (void...每当将加载请求的时候调用该方法,返回YES 表示加载该请求,返回NO 表示不加载该请求 //可以在该方法中拦截请求 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest...[request.URL.absoluteString containsString:@"dushu"]; } //开始加载网页,不仅监听我们指定的请求,还会监听内部发送的请求 -(void)webViewDidStartLoad...:(UIWebView *)webView //网页加载完毕之后会调用该方法 -(void)webViewDidFinishLoad:(UIWebView *)webView //网页加载失败调用该方法

    1.2K70

    iOS中UIWebView的使用详解 原

    iOS中UIWebView的使用详解 一、初始化与三种加载方式      UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种...: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,...,通过返回值来进行是否加载的设置 - (void)webViewDidStartLoad:(UIWebView *)webView; 开始加载时调用的方法 - (void)webViewDidFinishLoad...:(UIWebView *)webView; 结束加载时调用的方法 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError...*)error; 加载失败时调用的方法 专注技术,热爱生活,交流技术,也做朋友。

    79920

    iOS引入JavaScriptCore引擎框架(二)

    的方法,虽然通过KVC可达到目标,但是当APP采用该种hack方法时,有很大几率不能通过APP Store的审核,这对于一个基于上线的商业APP而言是难以忍受的,所以我们必须寻找另一种方法来获取UIWebView...webView:didStartProvisionalLoadForFrame:开始加载,在这里获取加载的url webView:didReceiveTitle:forFrame...Nick的发现     在iOS中,尽管没有暴露WebFrameLoadDelegate,但是在具体实现上仍会判断WebKit的implement有没有实现这个协议的某些方法,如果实现则仍会执行,而且在...这样,我们可以在UIWebView的webViewDidStartLoad和webViewDidFinishLoad之间获取到JSContext,进行oc和js的双向通信。...最终oc端接口的代码放在webView:didCreateJavaScriptContext:forFrame:中,这样js文件只需加载完毕就可执行oc的接口方法;而oc端要访问js的接口则可在webVIewDidFinishLoad

    1.5K40

    IOS WebView控件详解

    其加载数据的方式有三种: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的...方法中,一共有4个方法需要注意: //是否允许加载网页,也可获取js要打开的url,通过截取此url可与js交互 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest...- (void)webViewDidStartLoad:(UIWebView *)webView; //网页加载完成 - (void)webViewDidFinishLoad:(UIWebView *...#pragma mark 开始加载 //是否允许加载网页,也可获取js要打开的url,通过截取此url可与js交互 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest...多了一个加载文件方法,而且WKWebView的这些加载方法都有返回值。

    4.9K80

    IOS开发系列——UIWebView专题【整理,部分原创】

    ,使用的Ajax,需要注意的是UIWebViewDelegate不会监测到Ajax的request,也就是再执行Ajax代码时,shouldStartLoadWithReuqest等方法并不会被调用。...部分内容参考于stackoverflow 2.1.4UIWebView载入带有锚点(anchor)的URL时存在的问题及解决办法 UIWebView载入带有锚点(anchor)的URL时存在的问题及解决办法...UIWebView加载带有锚点的URL(如"file:///Users/admin/home.html#pos"),程序使用javascript的range.surroundContents方法在网页中为选中文字创建高亮标签...,当页面高度超过屏幕高度时,如果页面顶部和初始加载时的位置不同(进行过滚动),则每次添加高亮,页面就重新跳到初始加载时的位置,而不是保持当前位置。...PS:如果UIWebView加载的URL不带锚点,是不会出现上述问题的。

    94240

    【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )

    : 该方法是 UIPickerViewDelegate 委托方法; /* UIPickerViewDelegate 委托方法, 当选中某个选项时 激发的方法 row 参数 : 选中选项所在的列的索引...UIWebView 操作 (1) UIWebView 内容加载 UIWebView 加载 :  -- "loadHTMLString : baseURL" 方法 : 加载显示 HTML 字符串; --...:shouldStartLoadWithRequest:navigationType" 方法 : 加载指定 URL 网页时回调该方法; -- "webViewDidStartLoad" 方法 : 开始加载网页时激发的方法...; -- "webViewDidFinishLoad" 方法 : 结束加载网页回调的方法; -- "webViewDidFailLoadWithError" 方法 : 加载出现错误回调方法; 3....= self; } - (void) webViewDidStartLoad:(UIWebView *)webView{ } - (void) webViewDidFinishLoad:

    4.9K40

    Flutter 与 iOS 原生 WebView 对比

    测试手机:iPhoneX 系统:iOS12.0 加载速度对比 测试网页打开的速度,只需要获取 WebView 在开始加载网页和网页加载完成时的时间戳,时间戳的差即为打开网页的时间。...extension WebViewVC: UIWebViewDelegate { public func webViewDidStartLoad(_ webView: UIWebView) {...新浪首页 进行加载的对比,为了减小网络对加载速度的影响,我们让手机连接同一个网络,分别进行 10 次测试然后取平均值,另外,我们需要关闭 WebView 的缓存,防止缓存对加载速度产生影响: private...: widget.url, clearCache: true, appCacheEnabled: false, . . .); 下面使笔者进行 10 次测试所得到的数据:...> UIWebView > flutter_webview 占用内存对比 这里查看内存使用的是 Xcode 的 debug session 中的 memory,首先看之前测试时,连续打开十次新浪的内存情况

    1.6K20

    iOS开发之WebView

    从字面意思可以看出WebView就是用来加载网页的视图,和手机上的浏览器类似。   ...1.之前用storyboard拖控件时只是看着WebView在哪里静静的躺着(如下图所示),一直没有用过,如果想使用的话也很简单,就是把web view拖入到storyboard中即可:今天就写篇博客来应用一下...代码说明:           (1).创建一个NSURLRequest           (2).用myWebView加载NSURLRequest   3.webView的委托代理模式也挺简单的,截图如下...(1),shouldStartLoadWithRequest:请求URL时调用     (2),webViewDidStartLoad:开始加载网页后调用     (3).webViewDidFinishLoad...:加载网页完成后调用     (4).didFailLoadWithError:加载失败调用   4.加载成功后的效果如下: ?

    93090

    【IOS开发基础系列】UIWebView专题

    ,也就是再执行Ajax代码时,shouldStartLoadWithReuqest等方法并不会被调用。         ...部分内容参考于stackoverflow 2.1.4 UIWebView载入带有锚点(anchor)的URL时存在的问题及解决办法 UIWebView 载入带有锚点(anchor)的URL时存在的问题及解决办法...,遇到如下问题:         UIWebView加载带有锚点的URL(如"file:///Users/admin/home.html#pos"),程序使用javascript的range.surroundContents...方法在网页中为选中文字创建高亮标签,当页面高度超过屏幕高度时,如果页面顶部和初始加载时的位置不同(进行过滚动),则每次添加高亮,页面就重新跳到初始加载时的位置,而不是保持当前位置。         ...PS:如果UIWebView加载的URL不带锚点,是不会出现上述问题的。

    38830

    UI篇- UIWebView使用大全

    JS方法 与UIWebView进行交互,调用web页面中的需要传参的函数时,参数需要带单引号,或者双引号(双引号需要进行转义在转义字符前加\),在传递json字符串时不需要加单引号或双引号: -(void...有两种方式可根据加载内容 获取UIWebView的合适高度,但都需要在网页内容加载完成后才可以,即需要在webViewDidFinishLoad回调中使用。...所以需要在VC中用到webViewDidFinishLoad方法时,应在 WebViewJavascriptBridge.m中做设置。 18....UIWebView在 iOS11中的使用。 ? UIWebView 在iOS 11上 当顶部的 y值设为 0 时,是依然无法盖住UIStatusBar区域的,但是滚动时就会出现问题了。...如何获取UIWebview加载内容的标题 - (void)webViewDidFinishLoad:(UIWebView *)webView { titleLabel.text = [webView

    2K10
    领券