WKWebView加载网页加载不出来问题

本文探讨了WKWebView加载网页时出现白屏的原因及解决方法,指出未正确配置AppTransportSecuritySettings会导致加载HTTPS页面失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前有一个项目一直使用WKWebView,比UIWebView占用性能少很多,而且很流畅。网上有很多小伙伴遇到一个问题,WKWebView加载网页加载不出来,白屏等,于是就说WK还不成熟。

不要轻易下结论收WK还不成熟,反正我用着感觉比UIWebView好太多的感脚,白屏只是因为我们没找到白屏的问题而已,而非WK的问题。

一些问题

代码如下
_webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com/"]];
[_webView loadRequest:request];
[self.view addSubview:_webView];

如上代码有问题吗?我觉得没一点问题。那么有些小伙伴怎么这样写网页就是加载不出来呢?

WKWebView加载网络地址“白屏”

WKWebView加载不出来网页了,UIWebView可以

还有些人说,我的怎么可以加载啊。

比如这里:http://www.cocoachina.com/bbs/read.php?tid-1726060-page-2.html

问题本质

出现加载不出来本质原因是,如果没在plist文件中设置App Transport Security Settings的话,加载https链接,肯定是加载不出来的,第一次加载不出来,产生了缓存,第二次再去加载也加载不出来了,可以尝试一下就知道了。

有些小伙伴说我的怎么能加载出来啊,那是因为你设置了App Transport Security Settings,并加载了https链接。或者没设置,第一次加载的是一个http链接地址,就加载出来了。而第一次加载不出来,以后就出不来了,因为WK缓存的问题。

清除WK的缓存之后再加载就出来了,或者直接把App卸载了,重新run一下就可以了。

<think>好的,我现在需要回答用户关于如何在iOS中使用WKWebView加载网页问题,用户希望得到Swift或Objective-C的示例。首先,我需要回忆WKWebView的基本用法,确保自己记得正确的步骤。 首先,WKWebView是WebKit框架的一部分,所以在使用前需要导入WebKit。无论是Swift还是Objective-C,都需要在代码中引入相应的头文件或模块。比如在Swift中,需要`import WebKit`,而在Objective-C中则是`@import WebKit;`或者`#import <WebKit/WebKit.h>`。 接下来,创建WKWebView的实例。通常,开发者会在视图控制器中创建并配置WKWebView。需要设置其frame或使用Auto Layout来布局,确保它正确显示在界面上。然后,加载网页的方法一般是通过URLRequest,使用`load(_ request: URLRequest)`方法。这里需要确保URL是有效的,并且应用有正确的网络权限,比如在iOS中需要在Info.plist中添加App Transport Security设置,允许HTTP加载,如果需要的话。 对于Swift的示例,可能的结构是:在ViewController的viewDidLoad方法中初始化WKWebView,添加到视图中,然后创建URLRequest加载指定的URL。需要处理可能的错误,比如URL无效的情况,这时候可能需要使用guard语句或者if let进行可选绑定。 对于Objective-C,步骤类似,但语法同。需要创建WKWebView实例,配置frame,添加到视图,然后用NSURLRequest加载URL。同样要注意内存管理,比如在ARC环境下是否需要强引用保持webView。 用户可能还会遇到常见问题,比如如何加载本地HTML文件,如何处理导航委托方法,或者如何与JavaScript交互。虽然用户现在的问题集中在加载网页,但提供一些扩展信息可能会有帮助,比如提到navigationDelegate或如何注入JavaScript。 另外,需要检查是否有相关的引用资料可以支持回答。用户提供的引用中,引用[1]提到UIWebView的同导航类型,但用户现在问的是WKWebView,所以可能需要注意两者的区别,并指出UIWebView已被弃用,推荐使用WKWebView。引用[3]提到iOS上PWA的限制,虽然和当前问题关系大,但可能可以忽略。 还需要确保代码示例正确,符合最新的Swift或Objective-C标准。例如,在Swift中使用URL(string:)初始化URL,并处理可选值,避免强制解包导致的崩溃。在Objective-C中使用NSURL的URLWithString:方法。 最后,生成相关问题的时候,需要考虑用户可能进一步想知道的内容,比如处理导航、加载本地内容、与JavaScript交互等。这样可以帮助用户更深入地了解WKWebView的使用。</think>在iOS中使用`WKWebView`加载网页可以通过Swift或Objective-C实现,以下是具体示例和步骤: --- ### **Swift示例** ```swift import UIKit import WebKit class ViewController: UIViewController { private var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() // 初始化WKWebView并设置布局 webView = WKWebView(frame: view.bounds) view.addSubview(webView) // 加载网页 if let url = URL(string: "https://www.example.com") { let request = URLRequest(url: url) webView.load(request) } } } ``` --- ### **Objective-C示例** ```objective-c #import <UIKit/UIKit.h> #import <WebKit/WebKit.h> @interface ViewController : UIViewController @property (nonatomic, strong) WKWebView *webView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 初始化WKWebView并设置布局 self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:self.webView]; // 加载网页 NSURL *url = [NSURL URLWithString:@"https://www.example.com"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request]; } @end ``` --- ### **关键步骤说明** 1. **导入WebKit框架**:无论是Swift还是Objective-C,需先引入`WebKit`模块。 2. **初始化WKWebView**:设置其`frame`或使用Auto Layout约束。 3. **加载网页**:通过`URLRequest`加载目标URL,需确保URL有效且已配置网络权限(如HTTPS白名单)[^3]。 4. **添加到视图层级**:将`WKWebView`实例添加到父视图中。 --- ### **常见问题处理** - **加载本地HTML文件**:使用`loadFileURL(_:allowingReadAccessTo:)`方法。 - **处理导航事件**:通过`WKNavigationDelegate`监听加载状态(如开始、完成、失败)。 - **与JavaScript交互**:使用`evaluateJavaScript(_:completionHandler:)`执行脚本。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值