"清明时节雨纷纷, 路上行人欲断魂.", 今天是清明节, 小编也是奔波许久才回到家中, 今天我们来制作一个关于导入清明节网站的 Demo.(下面是小编自己做的一个案例)
图 1-- 导航页面
图 2-- 载入简书网站
图 3-- 载入 4399 网页
再看过小编的案例后, 是不是自己也有想法做一个呢, 今天让小编带着大家看一下如何将网页载入到程序中, 和以往相同, 今天侧重点仍然是代码部分的书写.
一. 网页的主要内容
大家不要误会, 这里的主要内容是指是网页的域名.
- http://mail.163.com/index.html
- 1)http://: 这个是协议, 也就是 HTTP 超文本传输协议, 也就是网页在网上传输的协议.
2)mail: 这个是服务器名, 代表着是一个邮箱服务器, 所以是 mail.
3)163.com: 这个是域名, 是用来定位网站的独一无二的名字.
4)mail.163.com: 这个是网站名, 由服务器名 + 域名组成.
5)/: 这个是根目录, 也就是说, 通过网站名找到服务器, 然后在服务器存放网页的根目录
6:)index.HTML: 这个是根目录下的默认网页(当然, 163 的默认网页是不是这个我不知道, 只是大部分的默认网页, 都是 index.HTML)
7)http://mail.163.com/index.html: 这个叫做 URL, 统一资源定位符, 全球性地址, 用于定位网上的资源.
注意: 这里面提及了 URL 这个名词, 她正事我要介绍的 NSURL 的一部分, 在简单了解了网址的构成后, 我们正式通过代码来书写程序吧
二. 代码实现部分
1. 私有化 webView
@property (nonamatic,strong) WKWebView *webview;
2. 读取网页
- // 创建 webView
- self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0,50,screen.size,width,screen.size,height)];
- NSString *urlStr = @"https://baike.baidu.com/item/清明节习俗/4155712";
- NSURL *url = [[NSURL alloc] initWithString urlStr];
- NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
- self.webView.navigationDelegate = self;
- [self.view addSubview:self.webView];
3. 实现委托协议
- - (void)webView:(WebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
- NSLog(@"开始加载");
- self.webView.allowBackForwardNavigationGestures = YES; // 滑动返回上一页
- [self.webView configuration]; // 保存网页浏览信息
- }
- - (void)webView:(WebView *)webView didCommitNavagation:(WKNavigation *)navigation{
- NSLog(@"内荣开始返回");
- }
- - (void)webView:(WebView *)webView didFinishNavagation:(WKNavigation *)navigation{
- NSLog(@"加载完成");
- }
- - (void)webView:(WebView *)webView didFialProvisionNavagation:(WKNavigation *)navigation withError:(NSError *)error {
- NSLog(@"加载失败");
- }
三. 代码分析
首先创建一个 webView 视图, 并初始化位置坐标, 为了更好的显示网页内容, 可以选择原始屏幕的 origin and size;
将网页地址用 NSString 进行保存(字符串类型);
将转换好的字符串类型网页地址传送给 NSURL 的 initWithURl 方法;
并要求系统进行网络访问 NSURLRequest 将 url 传送给需要申请的方法当中;
最后实现协议;
在加载完成后可以选择手势操作类型返回和添加保存记录的方法调用;
四. 加载失败解决方法
当你是第一次使用的小白时候, 会发现不论怎么设置网页 (代码正确的前提下) 你将无法加载成功, 此时我们需要进行解决此类办法
产生这个问题的原因是 Xcode 本身将访问 http 域名的限制权限关闭了, 此时只用打开权限才能解决问题
步骤:
1. 打开项目工程组 (小编前几章有所提及) 的 info 文件;
2. 进行添加 App Transport Secutiry;
3. 在 App Transport Secutiry 中添加(Add Row)Allow Arbitrary Loads in Web Content;
4. 将默认值修改为 YES;
5. 重新运行即可
五. 展示网页内容
图 4-- 网页内容. PNG
六. 加载本地网页
上面的教程是加载非本地网页, 使用异步加载, 现在我们讨论如何加载本地网页, 当加载本地网页时候使用同步加载
代码教程如下
- NSString *htmlPath = [[NSBundle mainBundle] pathForRescource:@"index" ofType:@"html"];
- NSURL *bundleUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
- NSError *error = nil;
- NSString *HTML = [[NSString alloc] initWithContentOfFile:htmlPath encoding:NSUTF8StringEncoding error:&error]];
- if(error == nil){
- [self.view addSubview:self.webView];
- }
代码解析
设置本地文件的路径为字符串形式
并利用 NSURL 接收消息
设置错误为空
利用 NSString 打开文件并且打开方式为 UTF-8
判断正确打开后, 将子视图传送给父视图
总结:
通过非本地加载和本地加载, 小白们可以使用此方法来调用网页, 同时可以使用按钮等控件创建目标 (addTarget) 来调用网页. 对于今天的知识用什么不理解的地方, 可以留言评论区进行讨论.
来源: http://www.jianshu.com/p/3f5cdd9e8726