iOS WKWebView loadHTMLString 异步加载图片 为图片添加点击事件

本文主要是针对后台返回数据是 html 标签的数据加载

异步加载 html 标签内的 img 标签,给 img 标签添加点击事件


例如返回的数据格式如下

一、《望天门山》 作者:唐代李白 1、原文 天门中断楚江开,碧水东流至此回。两岸青山相对出,孤帆一bai片日边来。 2、译文 天门山从中间断裂是楚江把它冲开,碧水向东浩然奔流到这里折回。 两岸高耸的青山隔着长江相峙而立,江面上一叶孤舟像从日边驶来。
或者 完整的 html 标签数据

这些数据一般都是使用了富文本编辑器编辑的内容,而且各种标签样式都有可能使用到,所以最好还是使用 WKWebView 来加载!
但是如果内容含有 img 标签的话就会等待所有的图片加载完才会展示出整体的样式,这样比较影响体验。
所以应该考虑异步加载图片,而不影响文字等标签样式的展示。

Demo下载

1.先将图片链接中的 scheme 替换为自定义的 scheme

- (void)changeImageScheme {
    self.htmlString = [self.htmlString stringByReplacingOccurrencesOfString:self.oriImageUrl withString:self.xxxCustomImageUrl];
}

2.在 html 标签中添加函数

- (void)addJsScript {
    
    NSString *htmlLab = @"";
    NSString *scriptLab1 = @"";
    
    NSString *jsFunctionString = @"function xxxGetAllImg() { return document.getElementsByTagName(\"img\"); }\
    function xxxUpdateImage(url, imgData) {  var list = Array.from(xxxGetAllImg()); for (let item of list) {  if ((item.src == url)) { item.src = imgData;   break; } } }        ";

    
    if (![self.htmlString containsString:htmlLab]) {
        [self addHtmlLab];
    }
    
    
    if ([self.htmlString containsString:scriptLab1]) {
     
        NSString *scriptString = [NSString stringWithFormat:@"%@%@",jsFunctionString,scriptLab1];
        self.htmlString = [self.htmlString stringByReplacingOccurrencesOfString:scriptLab1 withString:scriptString];
        
    }else {
        NSString *scriptLab0 = @"
                    
                    

你可能感兴趣的:(iOS WKWebView loadHTMLString 异步加载图片 为图片添加点击事件)