(五十九)iOS网络基础之UIWebView简易浏览器实现
【UIWebView网络浏览器】
通过webView的loadRequest方法可以发送请求显示相应的网站,例如:
NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];
// 创建请求数据
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 向服务器发送请求
[self.webView loadRequest:request];
通过使用searchBar,可以实现网址的输入,searchBar有一个delegate属性可以将控制器设为其代理,下面实现了一个简易的浏览器。
首先是调用代理方法来监听搜索按钮:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
[self.view endEditing:YES];
[self searchWithNSStringUrl:searchBar.text];
}
然后实现搜索栏信息的解析,注意没有http://要补全的逻辑方法:
使用NSStringFromRange方法可以实现字符串的子串位置查找,通过判断range的location成员是否等于NSNotFound可以判断是否匹配失败。
- (void)searchWithNSStringUrl:(NSString *)surl{
NSRange range = [surl rangeOfString:@"http://"];
NSLog(@"range = %@",NSStringFromRange(range));
if (range.location == NSNotFound) {
NSString *head = @"http://";
surl = [head stringByAppendingString:surl];
}
NSURL *url = [NSURL URLWithString:surl];
// 创建请求数据
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 向服务器发送请求
[self.webView loadRequest:request];
}
直接判断字符串是否以某字符串开头可以直接使用NSString的hasPrefix:方法。
前进和后退的实现:
直接将按钮的前进和后退事件和按钮绑定。
一些细节:
1.在不能后退和前进时应该将按钮禁用,不同页面是通过链表连接的。
判断的方式:通过判断webView的链表,也可以通过canGoBack和canGoForward两个BOOL变量来判断。
2.地址栏应该随着网页内容而改变,通过获取WebView的URL,并通过absoluteString方法转为字符串:
- (void)webViewDidStartLoad:(UIWebView *)webView{
NSURL *url = webView.request.URL;
NSString *surl = [url absoluteString];
self.searchBar.text = surl;
}
使用HTML:
PhoneGap是基于HTML 5开发的一套框架,只要会做网页就可以开发应用,但是不能使用原生的硬件。
好处是可以一次性开发多个平台的应用。
【利用UIWebView加载文件】
可以通过Bundle或者沙盒加载。
传入文件的URL即可加载doc、txt、图片、pdf等各种内容。
例如读入一本pdf:
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"English.pdf" withExtension:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:fileURL];
[self.webView loadRequest:request];
还可以通过dataDetectorTypes来设定需要高亮链接的文本类型:例如电话、地址、邮箱等
_webView.dataDetectorTypes = UIDataDetectorTypeAll;
【利用UIWebView加载HTML】
[self.webView loadHTMLString:@"<h1>hello</h1>" baseURL:nil];
利用这个功能可以实现删除广告等功能。
【UIWebView能够加载文件的原因】
MIME type是一个互联网标准,服务器将MIME标识符放入传送的数据中告诉浏览器使用哪种插件读取相关文件,MIME类型可以包含视频、图像、文本等数据。
网络通过二进制数据流来传输数据,客户端通过MIME type能够知道如何处理接收的数据。
(五十九)iOS网络基础之UIWebView简易浏览器实现的更多相关文章
- JAVA学习第五十九课 — 网络编程概述
网络模型 OSI(Open System Interconnection)开放系统互连:參考模型 TCP/IP 网络通讯要素 IP地址 port号 传输协议 网络參考模型 七层OSI模型的基本概念要了 ...
- iOS网络基础---iOS-Apple苹果官方文档翻译
CHENYILONG Blog iOS网络基础---iOS-Apple苹果官方文档翻译 iOS网络基础 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http: ...
- “全栈2019”Java第五十九章:抽象类与抽象方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- iOS网络基础知识
iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...
- ios网络学习------4 UIWebView的加载本地数据的三种方式
ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...
- KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础
原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...
- 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装
第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...
- iOS基础 - iOS网络基础
一.网络访问的四个步骤 l 第一步:确定地址URL l 第二步:建立请求 l 第三步:建立并启动连接 l 第四步:连接完成,处理结果 备注:URL,统一资源定位符(URL,英语Uniform Reso ...
- Linux 入门记录:十四、网络基础
一.IP地址 IP 地址是因特网上的每个网络节点在全球范围内的唯一标识符,一个 IP 地址唯一标识一个主机(严格来说是标识一个网卡接口 network interface card). 现在应用最为广 ...
随机推荐
- python学习之路web框架续
中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项 ...
- block的那些事(从懵懂到使用)
从大学开始自学iOS,在iOS岗位已经两年了,遇到传值等操作,代理和block二选一的话,以前我会毫不犹豫选择代理.久而久之,入职到大公司之后,发现处处是block的天地,才慢慢的了解block并爱上 ...
- day08 JSP
day08 JSP 1. jsp 入门和 jsp 运行原理 2. jsp 语法 2.1 jsp 模板元素:jsp 页面中的 html 内容.它定义了网络基本骨架,即定义了页面结构和外观. 2.2 js ...
- python复杂网络库networkx:绘图draw
http://blog.csdn.net/pipisorry/article/details/54291831 networkx使用matplotlib绘制函数 draw(G[, pos, ax, h ...
- Bootstrap3 表格-鼠标悬停
通过添加 .table-hover 类可以让 <tbody> 中的每一行对鼠标悬停状态作出响应. <table class="table table-hover" ...
- T-SQL注意事项(1)——SET NOCOUNT ON的去与留
前言 用了一段时间T-SQL之后,哪怕自己没用过,也多多少少看过SSMS中的SET NOCOUNT ON命令,很多性能优化文章中都有提到这个东西,它们建议尽可能使用这个命令减少网络传输的压力,那么今天 ...
- Spark内存管理-UnifiedMemoryManager和StaticMemoryManager
在Spark-1.6.0中,引入了一个新的参数spark.memory.userLegacyMode(默认值为false),表示不使用Spark-1.6.0之前的内存管理机制,而是使用1.6.0中引入 ...
- Anakia 转换xml文档为其他格式
一.简介 Anakia 使用JDOM 和Velocity将XML文档转换为特定格式的文档 二.解析xml文档方法 1.DOM java jdk,xml-api.jar 需要加载整个xml文档来构建层次 ...
- UNIX网络编程——进程间通信概述
一.顺序程序与并发程序特征 顺序程序特征 顺序性封闭性:(运行环境的封闭性)确定性可再现性 并发程序特征 共享性并发性随机性 二.进程互斥 1.由于各进程要求共享资源,而且有些资源需要互斥使用,因此各 ...
- iOS下JS与OC互相调用(二)--WKWebView 拦截URL
在上篇文章中讲述了使用UIWebView拦截URL的方式来处理JS与OC交互. 由于UIWebView比较耗内存,性能上不太好,而苹果在iOS 8中推出了WKWebView. 同样的用WKWebVie ...