对于不少iOS开发人员来说,HTML5的内容比較陌生。

尤其是UIWebView类的 stringByEvaluatingJavaScriptFromString 方法

让非常多人认为又得学一种新的语言。

而这一部分也是项目中学生常问的问题之中的一个。

本文以Category(类目)的方式扩展了UIWebView类,将一些经常使用的JavaScript操作封装成UIWebView类方法。

最新源码下载地址:https://github.com/duzixi/UIWebView-HTML5(持续维护)

原文首发地址:http://blog.csdn.net/duzixi/article/details/36047201

头文件(UIWebView+HTML5.h):

//
// UIWebView+HTML5.h
// WebViewJS
//
// Created by 杜子兮(duzixi) on 14-6-30.
// Edited by 杜子兮(duzixi) on 14-7-11. 改动网页图片显示大小
// 加入(jQuery)
// Copyright (c) 2014年 lanou3g.com 蓝鸥. All rights reserved.
// #import <UIKit/UIKit.h> @interface UIWebView (JavaScript) #pragma mark -
#pragma mark 获取网页中的数据 /// 获取某个标签的结点个数
- (int)nodeCountOfTag:(NSString *)tag; /// 获取当前页面URL
- (NSString *) getCurrentURL; /// 获取标题
- (NSString *) getTitle; /// 获取图片
- (NSArray *) getImgs; /// 获取当前页面全部链接
- (NSArray *) getOnClicks; #pragma mark -
#pragma mark 改变网页样式和行为 /// 改变背景颜色
- (void) setBackgroundColor:(UIColor *)color; /// 为全部图片加入点击事件(网页中有些图片加入无效)
- (void) addClickEventOnImg; /// 改变全部图像的宽度
- (void) setImgWidth:(int)size; /// 改变全部图像的高度
- (void) setImgHeight:(int)size; /// 改变指定标签的字体颜色
- (void) setFontColor:(UIColor *) color withTag:(NSString *)tagName; /// 改变指定标签的字体大小
- (void) setFontSize:(int) size withTag:(NSString *)tagName; @end

实现文件(UIWebView+HTML5.m):

//
// UIWebView+HTML5.m
//
// Created by 杜子兮(duzixi) on 14-6-30.
// Edited by 杜子兮(duzixi) on 14-7-11. 改动网页图片显示大小
// 加入(jQuery)
// Copyright (c) 2014年 lanou3g.com 蓝鸥. All rights reserved.
// #import "UIWebView+HTML5.h"
#import "UIColor+Change.h" @implementation UIWebView (JavaScript) #pragma mark -
#pragma mark 获取网页中的数据 /// 获取某个标签的结点个数
- (int)nodeCountOfTag:(NSString *)tag
{
NSString *jsString = [NSString stringWithFormat:@"document.getElementsByTagName('%@').length", tag];
int len = [[self stringByEvaluatingJavaScriptFromString:jsString] intValue];
return len;
} /// 获取当前页面URL
- (NSString *)getCurrentURL
{
return [self stringByEvaluatingJavaScriptFromString:@"document.location.href"];
} /// 获取标题
- (NSString *)getTitle
{
return [self stringByEvaluatingJavaScriptFromString:@"document.title"];
} /// 获取全部图片链接
- (NSArray *)getImgs
{
NSMutableArray *arrImgURL = [[NSMutableArray alloc] init]; for (int i = 0; i < [self nodeCountOfTag:@"img"]; i++) {
NSString *jsString = [NSString stringWithFormat:@"document.getElementsByTagName('img')[%d].src", i];
[arrImgURL addObject:[self stringByEvaluatingJavaScriptFromString:jsString]];
}
return arrImgURL;
} /// 获取当前页面全部点击链接
- (NSArray *)getOnClicks
{
NSMutableArray *arrOnClicks = [[NSMutableArray alloc] init]; for (int i = 0; i < [self nodeCountOfTag:@"a"]; i++) {
NSString *jsString = [NSString stringWithFormat:@"document.getElementsByTagName('a')[%d].getAttribute('onclick')", i];
NSString *clickString = [self stringByEvaluatingJavaScriptFromString:jsString];
NSLog(@"%@", clickString);
[arrOnClicks addObject:clickString];
}
return arrOnClicks;
} #pragma mark -
#pragma mark 改变网页样式和行为 /// 改变背景颜色
- (void)setBackgroundColor:(UIColor *)color
{
NSString * jsString = [NSString stringWithFormat:@"document.body.style.backgroundColor = '%@'",[color webColorString]];
[self stringByEvaluatingJavaScriptFromString:jsString];
} /// 为全部图片加入点击事件(网页中有些图片加入无效,须要协议方法配合截取)
- (void)addClickEventOnImg
{
for (int i = 0; i < [self nodeCountOfTag:@"img"]; i++) {
//利用重定向获取img.src,为区分,给url加入'img:'前缀
NSString *jsString = [NSString stringWithFormat:
@"document.getElementsByTagName('img')[%d].onclick = \
function() { document.location.href = 'img' + this.src; }",i];
[self stringByEvaluatingJavaScriptFromString:jsString];
}
} /// 改变全部图像的宽度
- (void) setImgWidth:(int)size
{
for (int i = 0; i < [self nodeCountOfTag:@"img"]; i++) {
NSString *jsString = [NSString stringWithFormat:@"document.getElementsByTagName('img')[%d].width = '%d'", i, size];
[self stringByEvaluatingJavaScriptFromString:jsString];
}
} /// 改变全部图像的高度
- (void) setImgHeight:(int)size
{
for (int i = 0; i < [self nodeCountOfTag:@"img"]; i++) {
NSString *jsString = [NSString stringWithFormat:@"document.getElementsByTagName('img')[%d].height = '%d'", i, size];
[self stringByEvaluatingJavaScriptFromString:jsString];
}
} /// 改变指定标签的字体颜色
- (void)setFontColor:(UIColor *)color withTag:(NSString *)tagName
{
NSString *jsString = [NSString stringWithFormat:
@"var nodes = document.getElementsByTagName('%@'); \
for(var i=0;i<nodes.length;i++){\
nodes[i].style.color = '%@';}", tagName, [color webColorString]];
[self stringByEvaluatingJavaScriptFromString:jsString];
} /// 改变指定标签的字体大小
- (void)setFontSize:(int)size withTag:(NSString *)tagName
{
NSString *jsString = [NSString stringWithFormat:
@"var nodes = document.getElementsByTagName('%@'); \
for(var i=0;i<nodes.length;i++){\
nodes[i].style.fontSize = '%dpx';}", tagName, size];
[self stringByEvaluatingJavaScriptFromString:jsString];
}
@end



【iOS】UIWebView HTML5 扩展的更多相关文章

  1. 【iOS】UIWebView的HTML5扩展之canvas篇

    先前公布大那个所谓的"HTML5"扩展严格说来还算不是"HTML5".曲曲几行JS代码就自诩为HTML5扩展多少有些标题党的嫌疑. 而相比之下,本篇的主题can ...

  2. iOS与HTML5交互方法总结(转)

    今天小编在找技术文章的时候,发现这样一个标题:iOS与HTML5交互方法总结,怎么看着这么熟悉呢?   还以为是刚哥用了别的文章,点进去一看,原来是刚哥自己写的文章,他们转载的,而且还上了Dev St ...

  3. ios UIWebView截获html并修改便签内容

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端 ...

  4. iOS与HTML5交互方法总结(修正)

    摘要 看了不少别人写的博客或者论坛,关于iOS与HTML5交互方法大概主要有5种方式: 1. 利用WKWebView进行交互(系统API) 2. 利用UIWebView进行交互(系统API) 3. 苹 ...

  5. ios UIWebView截获html并修改便签内容(转载)

    ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...

  6. IOS UIWebView截获html并修改便签内容,宽度自适应

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果:  方法:通过js截获UIWebView中的html,然后修改html标签内容:  实例代码:  服 ...

  7. 开发腾讯移动游戏平台SDK ios版Ane扩展 总结

    本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程 ...

  8. iOS 通知中心扩展制作初步-b

    涉及的 Session 有 Creating Extensions for iOS and OS X, Part 1 Creating Extensions for iOS and OS X, Par ...

  9. IOS中类的扩展(协议,分类)

    IOS中类的扩展(协议,分类) 扩展类,我们可以使用协议和分类这两种方法,下面我们来分别实现这两种方法: 参考网址:http://www.cnblogs.com/wendingding/p/37095 ...

随机推荐

  1. Opera Unit如何自定义My Opera的网页界面

    1 双击Opera Unite Home进入你的个人主页 2 点击你的头像进入你的个人信息设置页面,然后点击右上角的设置图标 3 在下拉菜单中选择"Customize design" ...

  2. 翻译记忆软件-塔多思TRADO经典教程_5

    TRADOS新手必读 共有篇贴子 TRADOS新手必读   译海撷英系列之软件漫谈之TRADOS新手必读 作者:苏任 我很喜欢到翻译中国网站上来四处看看,一开始主要是关心应用资料和软件,后来就对网友的 ...

  3. Java从零开始学十二(构造方法)

    一.构造方法 构造方法的主要目的是为类中的属性初始化 二.构造方法的定义格式 class 类名称{ 访问权限 类名称(类型1 参数1,类型2 参数2,…){ 程序语句 ; …    // 构造方法没有 ...

  4. QT内label控件通过opencv显示图像

    1.对pro进行配置.使其可以理解opencv. INCLUDEPATH+=d:\opencv249\include\opencv\ d:\opencv249\include\opencv2\ d:\ ...

  5. Gulp构建前端自动化工作流之:常用插件介绍及使用

    在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及 ...

  6. Java类(继承)初始化顺序

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  7. EXCEPTION-JSTL

      CreateTime--2016年11月6日21:42:29Author:Marydon 声明:异常类文章主要是记录了我遇到的异常信息及解决方案,解决方案大部分都是百度解决的,(这里只是针对我遇到 ...

  8. Openstack网络相关概念比较复杂,经常使人混淆,本文进行相关说明。

    Openstack网络相关概念比较复杂,经常使人混淆,本文进行相关说明. 文中相关术语与缩写 英文 缩写 中文 Virtual Local Area Network VLAN 虚拟局域网 Virtua ...

  9. 使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度

    上一篇博文使用PhoneGap开发基于Html5应用一:PhoneGap简单介绍 中我介绍了怎样从phonegap官网上下载源代码并启动第一个应用,今天我们把phonegap的应用略微改一下,让他实现 ...

  10. 【TP框架】包括TP3.1和3.2,自带缓存使用机制

    原文章出处: http://blog.163.com/liwei1987821@126/blog/static/172664928201422133218356/ 写在开始:缓存变量和session变 ...