从UIWebView迁移到WKWebView时遇request属性不存在错误
修复WKWebView中Property 'request' not found的错误
你遇到的这个问题很典型——WKWebView并没有像UIWebView那样直接暴露request属性,这是两者API设计上的差异导致的。
在UIWebView里,我们可以直接通过webview.request拿到当前加载的请求,但WKWebView把这些导航相关的信息放到了WKNavigation和WKBackForwardList中。要获取当前的请求,你可以通过以下两种方式:
方法一:通过当前导航对象获取
如果WebView正在加载过程中,可以用currentNavigation的request属性:
if (!webview.currentNavigation.request) { // 你的逻辑代码 }
方法二:通过历史记录列表获取当前页面的请求
如果页面已经加载完成,currentNavigation可能为nil,这时候可以从backForwardList的currentItem里取请求:
WKBackForwardListItem *currentItem = webview.backForwardList.currentItem; if (!currentItem.request) { // 你的逻辑代码 }
完整兼容替换示例
为了同时覆盖加载中和已加载完成的场景,推荐你把原来的代码替换成这样:
WKWebView *webview = [[WKWebView alloc] initWithFrame:CGRectZero]; ... // 优先从当前导航取请求,无结果则从历史记录当前项获取 NSURLRequest *currentRequest = webview.currentNavigation.request ?: webview.backForwardList.currentItem.request; if (!currentRequest) { // 你的原有逻辑代码 }
这样就能完美替代原来UIWebView的request属性逻辑,解决报错问题啦~
内容的提问来源于stack exchange,提问作者salud
相关产品推荐
相关产品推荐

