点击图片获取webView中图片url

#import "ViewController.h"
#import <JavaScriptCore/JavaScriptCore.h>
@interface ViewController ()<UIWebViewDelegate>
{
    UIWebView * _webView;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    _webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
    _webView.delegate = self;
    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://news.xinhuanet.com/politics/2017-05/18/c_1120991501.htm"]]];
    [self.view addSubview:_webView];
}
//网页加载完成:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    
    [self test:webView];

    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    
    context[@"passValue"] = ^{
        NSArray *arg = [JSContext currentArguments];
        NSString *st = [NSString stringWithFormat:@"%@",arg[0]];
        NSArray* are = [st componentsSeparatedByString:@"****"];
        
        NSLog(@"%@",are);
    };
}

- (void)test:(UIWebView*)webView{
//如果网页的正文不是content 的话, 替换成对应的标签
    static  NSString * const jsIN =@"function showimg() {\
    var imgs = document.getElementById(\"content\").getElementsByTagName(\"img\");\
    var imgScr = '';\
    for (var i = 0; i < imgs.length; i++) {\
    var temp = (imgScr.length > 0) ?'****':'';\
    imgScr = imgScr + temp + imgs[i].src;\
    };\
    for (var i = 0; i < imgs.length; i++) {\
        imgs[i].addEventListener(\"click\", function() {\
        passValue(imgScr);\
        });\
    };\
}";
    
  [webView stringByEvaluatingJavaScriptFromString:jsIN]; //注入js代码
  [webView stringByEvaluatingJavaScriptFromString:@"showimg()"];//启动函数

}
网页不分静态动态(这一点比pc端好多了)

如果图片是Data URL(data:image/jpg;base64,)这种格式加载的,使用返回数据需要判断处理
转换成image代码如下

    NSData *_decodedImageData = [[NSData alloc]initWithBase64EncodedString:@"your image data encoded by base64 " options:NSDataBase64DecodingIgnoreUnknownCharacters];
    
    UIImage *_decodedImage      = [UIImage imageWithData:_decodedImageData];

    NSLog(@"===Decoded image size: %@", NSStringFromCGSize(_decodedImage.size));

2.swift 版, 另外一种实现方法

需要的自己翻译成OC
代码来自于qq群


import UIKit
import Kingfisher
class WebViewController: UIViewController,UIWebViewDelegate {

    @IBOutlet var kuangView: UIView!
    @IBOutlet weak var imageview: UIImageView!
    @IBOutlet weak var webView: UIWebView!
    var currentIndex = 0
    var totalImg = 0
    @IBAction func onclickImg(_ sender: Any) {
        kuangView.isHidden = true
    }
    
    @IBAction func onBackImg(_ sender: Any) {
        if currentIndex > 0{
            currentIndex = currentIndex - 1
            let url = URL(string: urlArray[currentIndex])
            imageview.kf.setImage(with: url)
        }
    }
    
    @IBAction func onNextImg(_ sender: Any) {
        if currentIndex < totalImg - 1{
            currentIndex = currentIndex + 1
            let url = URL(string: urlArray[currentIndex])
            imageview.kf.setImage(with: url)
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
                // Do any additional setup after loading the view.
    }
    var urlArray = [String]()
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        let request = URLRequest(url: URL(string: "http://www.eshore.cn/eshoreWifi.html?userip=172.16.0.11")!)
        webView.loadRequest(request)
        webView.delegate = self

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func webViewDidFinishLoad(_ webView: UIWebView) {
        var jsGetImages = "function getImages(){var objs = document.getElementsByTagName(\"img\");var imgScr = '';for(var i=0;i<objs.length;i++){var iii=objs[i].src;imgScr = imgScr + iii + '+';objs[i].onclick = function(){document.location.href = \"ios://jsAttachment?\"+this.src;};};return imgScr;}"

        webView.stringByEvaluatingJavaScript(from: jsGetImages)
    
        var urlResurlt = webView.stringByEvaluatingJavaScript(from: "getImages()")

        urlArray = (urlResurlt?.components(separatedBy: "+"))!
        totalImg = urlArray.count - 1

    }
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        let url = request.url
//        print(url)
        if (url!.scheme == "ios") {
            let fun = url!.host
            let arg0Str = url?.query?.removingPercentEncoding
//            print(arg0Str)
            let arg0 = arg0Str?.data(using: String.Encoding.utf8)!
            switch fun!{
            case "jsAttachment"://选择图片
                jsAttachment(url: arg0Str!)
            default:
                break
            }
            return false;
            
        }
        return true
    }
    
    func jsAttachment(url : String){
        print(url)
        for (index ,value) in urlArray.enumerated(){
            if value == url{
                currentIndex = index
            }
        }
        let url = URL(string: url)
        imageview.kf.setImage(with: url)
        kuangView.isHidden = false
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,305评论 4 61
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,661评论 7 249
  • 我还在等你的路口 吹着凉凉的风 回忆波涛汹涌 我对看天空 回忆你的朦胧 一个会哭泣的季节 把天空装饰深蓝色 一如你...
    南枙清挽阅读 363评论 0 1
  • 文/汤霓萍 罪恶的魔爪,在预谋中 灭绝人性地掠夺 岁月累积的一切 无奈地 看良知背离 愚人节的那场雨 倾覆了黑...
    汤霓萍阅读 1,104评论 4 11
  • 上帝有两面镜子:一面是仙镜,照进里面的东西全是美丽的;另一面是魔镜,照进里面的东西都是丑陋的 。 森林的这边是乌鸦...
    墨上婲阅读 364评论 0 4