UIWebView的HTML5扩展

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

http://blog.csdn.net/duzixi/article/details/36047201

对于不少iOS开发者来说,HTML5的内容比较陌生。

尤其是UIWebView类的 stringByEvaluatingjavaScriptFromString 方法

让很多人觉得又得学一种新的语言。

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

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

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

头文件(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

原文出处:http://blog.csdn.net/duzixi/article/details/36047201

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航