(五十九)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). 现在应用最为广 ...
随机推荐
- iOS不能交互的几种情况
alpha <=0.01 hidden = YES userInteraction = NO 父试图不允许交互,子试图也不允许交互: 在父试图可见范围内,可以交互,超出部分失效,不能交互
- xshell连接centos与ubuntu
操作系统:Windows 7 应用软件:Ware Workstation &Xshell 5 Linux:CentOS 7 Minimal &Ubuntu Server 16 ==== ...
- Docker的Fig 项目
在你的应用里面添加一个 fig.yml 文件,并指定一些简单的内容,执行 fig up 它就能帮你快速建立起一个容器 快速搭建基于 Docker 的隔离开发环境 使用 Dockerfile 文件指定你 ...
- Shell脚本了解
一.什么是Shell Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面, ...
- [boost] build boost with intel compiler 16.0.XXX
Introduction There are few information about how to compile boost with Intel compiler. This article ...
- SQLite 运算符(http://www.w3cschool.cc/sqlite/sqlite-operators.html)
SQLite 运算符 SQLite 运算符是什么? 运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算. 运算符用于指定 SQLite 语句中的条件 ...
- SQLite 语法(http://www.w3cschool.cc/sqlite/sqlite-syntax.html)
SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和准则.本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门. 大小写敏感性 有个重要的点值得注意,SQL ...
- 自制Linux 终端 锁屏防窃助手
很多时候我们不能一直守护在自己的电脑旁边,而且有些文件并不想让别人知道.那么这时候来个锁屏,是再合适不过的了.今天分享一个自制的锁屏工具,如下. 准备 操作系统 : 我这里是ElementaryOS虚 ...
- Dynamics CRM2013 在Visual Studio中开启脚本的Xrm.Page智能提示
前面篇博文http://blog.csdn.net/vic0228/article/details/49663751提到了通过引用XrmPage-vsdoc.js文件来启用Xrm.Page的智能提示, ...
- 剑指Offer--图的操作
剑指Offer–图的操作 前言 企业笔试过程中会涉及到数据结构的方方面面,现将有关图的深度优先搜索与广度优先搜索进行整理归纳,方便日后查阅. 在已做过的笔试题目中,可用DFS解决的题目有: & ...