【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. python if判断语句&计算

    python对缩进要求严格,代码块里的缩进必须一样,可以常用 tab键  表示4个空格 if 条件: 代码块 else: if判断语句如下: 1 print("吃饭,喝水,回家") ...

  2. 闭关修炼屯题中,期末考完A

    FJUTOJ 1279 #include <cstdio> #include <iostream> #include <algorithm> #include &l ...

  3. C++笔记十二:C++对C的扩展——struct关键字类型增强

    C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型. C++中的struct是一个新类型的定义声明. struct Student { char name[100]; int  ...

  4. Docker常见仓库CentOS

    CentOS 基本信息 CentOS 是流行的 Linux 发行版,其软件包大多跟 RedHat 系列保持一致. 该仓库提供了 CentOS 从 5 ~ 7 各个版本的镜像. 使用方法 默认会启动一个 ...

  5. 关于Linux下软件包aptitude的相关操作

    aptitude+回车 - 进入aptitude操作界面,可以对预览查看各种软件包 aptitude show package_name - 列出与XXX相关的软件包信息,但是并不能看到该软件包所安装 ...

  6. springMVC源码分析--RequestToViewNameTranslator请求到视图名称的转换

    RequestToViewNameTranslator可以在处理器返回的View为空时使用它根据Request获取viewName.RequestToViewNameTranslator提供的实现类只 ...

  7. 20160220.CCPP体系详解(0030天)

    程序片段(01):对称.c 内容概要:对称 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h ...

  8. Spark:聚类算法

    Spark:聚类算法 Kmeans聚类 KMeans算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇.然后按平均法重新计算各个簇的质心,从而确定新的簇心.一直迭代,直到簇 ...

  9. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

  10. ROS(indigo) 用于机器人控制的图形化编程工具--code_it robot_blockly

    0 简介: 编程语言有汇编,高级语言,解释语言等,现在图形化编程也越来越流行.图形化编程简单易学.8年前,微软推出了VPL用于机器人程序设计,如Python和JavaScript都可以用图形化框图实现 ...