本文介紹如何從H5網頁上獲取到該網頁上的圖片及給圖片添加上點擊事件,通過Demo進行講解,代碼如下:
#import "ViewController.h"
@interface ViewController ()<UIWebViewDelegate>
@property (strong, nonatomic) NSMutableArray *mUrlArray;//圖片URL數組
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self loadWebView];
}
//加載WebView
-(void)loadWebView{
NSString *htmURL = @"http://finance.ifeng.com/a/20170703/15505126_0.shtml";//注意到plist中允許加載http請求
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
webView.delegate = self;
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:htmURL]]];
[self.view addSubview:webView];
}
//在這個方法中捕獲到圖片的點擊事件和被點擊圖片的url
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
//預覽圖片
if ([request.URL.scheme isEqualToString:@"image-preview"]) {
NSString* clickedImgURL = [request.URL.absoluteString substringFromIndex:[@"image-preview:" length]];
clickedImgURL = [clickedImgURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//path 就是被點擊圖片的url
NSInteger count = 0;//計數變量
for (NSString *imgURL in _mUrlArray) {
//比對數組中的圖片URL與選定圖片的URL
if ([imgURL isEqualToString:clickedImgURL]) {
//第三方圖片瀏覽器
// NSString *userid =@"1726";//用戶id
// [self showPhotoBrower:_mUrlArray andIndex:count dataArray:@[] isSelf:NO authId:userid];
return NO;
}
count ++;
}
return NO;
}
return YES;
}
//webView結束加載
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[self getImagesFromJSAndClickImgEvent:webView];
}
#pragma mark -- wsx 收集JS頁面傳來的圖片及添加圖片點擊事件
-(void)getImagesFromJSAndClickImgEvent:(UIWebView *)webView{
//這里是JS,主要目的: - 獲取H5圖片的url
static NSString * const jsGetImages =
@"function getImages(){\
var objs = document.getElementsByTagName(\"img\");\
var imgScr = '';\
for(var i=0;i<objs.length;i++){\
imgScr = imgScr + objs[i].src + '+';\
};\
return imgScr;\
};";
[webView stringByEvaluatingJavaScriptFromString:jsGetImages];//注入JS方法
//urlResurlt - 獲取到H5頁面上所有圖片的url的拼接
NSString *urlResurlt = [webView stringByEvaluatingJavaScriptFromString:@"getImages()"];
//mUrlArray就是所有圖片URL的數組
_mUrlArray = [NSMutableArray arrayWithArray:[urlResurlt componentsSeparatedByString:@"+"]];
if (_mUrlArray.count >= 2) {
[_mUrlArray removeLastObject];
}
//添加圖片可點擊JS
[webView stringByEvaluatingJavaScriptFromString:@"function registerImageClickAction(){\
var imgs=document.getElementsByTagName('img');\
var length=imgs.length;\
for(var i=0;i<length;i++){\
img=imgs[i];\
img.onclick=function(){\
window.location.href='image-preview:'+this.src}\
}\
}"];
[webView stringByEvaluatingJavaScriptFromString:@"registerImageClickAction();"];
}
@end