【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简易浏览器实现的更多相关文章

  1. JAVA学习第五十九课 — 网络编程概述

    网络模型 OSI(Open System Interconnection)开放系统互连:參考模型 TCP/IP 网络通讯要素 IP地址 port号 传输协议 网络參考模型 七层OSI模型的基本概念要了 ...

  2. iOS网络基础---iOS-Apple苹果官方文档翻译

    CHENYILONG Blog iOS网络基础---iOS-Apple苹果官方文档翻译 iOS网络基础 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http: ...

  3. “全栈2019”Java第五十九章:抽象类与抽象方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. iOS网络基础知识

    iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...

  5. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  6. KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

    原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...

  7. 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装

    第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...

  8. iOS基础 - iOS网络基础

    一.网络访问的四个步骤 l 第一步:确定地址URL l 第二步:建立请求 l 第三步:建立并启动连接 l 第四步:连接完成,处理结果 备注:URL,统一资源定位符(URL,英语Uniform Reso ...

  9. Linux 入门记录:十四、网络基础

    一.IP地址 IP 地址是因特网上的每个网络节点在全球范围内的唯一标识符,一个 IP 地址唯一标识一个主机(严格来说是标识一个网卡接口 network interface card). 现在应用最为广 ...

随机推荐

  1. JAVA中抽象类的使用

    抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现.具体来说,抽 ...

  2. Webpack 4 Tutorial: from 0 Conf to Production Mode

    webpack 4 is out! The popular module bundler gets a massive update. webpack 4, what's new? A massive ...

  3. Spring Boot+maven打war包

    存在一个坑: 官网文档 指出以下前3步做法,但是这样只可以打出可运行的jar包,要打出war包还要在文档后面的链接跳到另一个页面,才能找到第四步的做法,也就是最终能够打出war包,可能有些朋友有些粗心 ...

  4. MySQL系列教程(五)

    MyCAT MyCat是基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远 ...

  5. Git 处理tag和branch的命令

    最近想给GitHub 上的项目设置tag,可是使用GitHub Desktop,找了一圈都没找到快速设置Tag 的地方,最后只能通过终端命令来添加了. 想要查看Git 的命令,可以使用 git --h ...

  6. Android音频焦点处理相关的方法

    有这么一种场景:你打开qq音乐.优酷客户端.视频播放的时候.这个时候突然来电显示了,此时所有的MediaPlayer相关的服务或者响应都进入"休眠"状态.那么,这个功能是怎么实现的 ...

  7. Swift完成fizz buzz test

    看到一篇文章上说,很多貌似看过很多本编程书的童鞋连简单的fizz buzz测试都完不成. 不知道fizz buzz test为何物的,建议自行搜之. 测试要求是,编写满足以下条件的代码: Write ...

  8. Redis集群教程(Redis cluster tutorial)

    本博文翻译自Redis官网:http://redis.io/topics/cluster-tutorial        本文档以温和的方式介绍Redis集群,不使用复杂的方式来理解分布式系统的概念. ...

  9. Android开发学习之路--Drawable mutations

      时间过得很快,明天终于可以拿到房子了,交完这次房租,也可以成为房东了,看看博客也好久没有更新了,最近一直在整机器人,也没有太多时间整理博客.   今天下午和同事一起遇到了一个问题,就是明明没有改变 ...

  10. Activiti 流程部署方式 activi 动态部署(高级源码篇)

    Activiti的流程 部署方式有很多种方式,我们可以根据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结详细介绍了使用场景. 下面看一下部署方 ...