非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 非标准h5字符串的WKWebView展示前的解析与插入属性或标题头与解决WKWebView无法加载视频首帧问题

WKWebView加载h5中有视频链接,无法加载视频首帧,看到一片空白和一个播放按钮。那如何让它加载首帧图片呢?很简单在视频链接前加上controls=\"controls\" autoplay=\"autoplay\"。很不幸,当有这量个属性时,在电脑web浏览器上它直接自动播放了。而在iOS端它会自动加载视频数据,停留在首帧图片。由于列表中可能有很多视频,都一起播放,想一想就够乱的,而iOS端不加它却是空白。自动iOS端自己拿到h5字符加上这个属性了。当然在上传后台时加上controls=\"controls\"对web端也没有影响,iOS端就以它为视频识别吧!开始想的是用字符串替换简单搞定。不过理想很丰满,现实很骨感,替换不了。因为h5字符串中有双引号等控制字符。这也告诉我们字符串替换无法对含有特殊控制符的字符串进行替换。最后以双引号为间隔分割成数组,然后在数组中查找替换才搞定。

因为是含有非标准h5字符串,可能只返回一个字符串,由于没有设置字体WKWebView直接显示默认字体可能很小,完全达不到ui图的效果,只能增加头设置字体来搞定了。

-(void)updateBody
{
    if(isCommonUnitEmptyString(self.Body))
    {
        self.contentHeight = 0;
        return;
    }
    NSDictionary *attributes3 = @{NSFontAttributeName :BGFont(15)};     //字体属性,设置字体的font
    CGSize maxSize3 = CGSizeMake(FULL_WIDTH - COMMON_EDGE_DISTANCE*2, MAXFLOAT);     //设置字符串的宽高
    CGSize size3 = [getNotNilString(self.Body) boundingRectWithSize:maxSize3 options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes3 context:nil].size;
    self.contentHeight = size3.height+0.1;
    if([self.Body hasPrefix:@"<p>"] && [self.Body hasSuffix:@"</p>"])
    {
        self.Body = [NSString stringWithFormat:@"<head><style>p{font-size:30px}</style></head><body>%@</body>", self.Body];
    }
    else if(([self.Body hasPrefix:@"<img src"] && [self.Body hasSuffix:@"/>"]) || ([self.Body hasPrefix:@"<head><style>"] && [self.Body hasSuffix:@"</body>"]) || ([self.Body hasPrefix:@"<p><video src=\""] && [self.Body hasSuffix:@"\" controls=\"controls\" style=\"max-width:100%%\"></video></p>"]))
    {
    }
    else
    {
        self.Body = [NSString stringWithFormat:@"<head><style>p{font-size:30px}</style></head><body><p>%@</p></body>", self.Body];
    }
    self.Body = [self.Body stringByReplacingOccurrencesOfString:@"\" controls=\"controls\" autoplay=\"autoplay\" style=\"max-width:100%%\"></video></p>" withString:@"\" controls=\"controls\" style=\"max-width:100%%\"></video></p>"];
    NSArray *arr1 = [self.Body componentsSeparatedByString:@"\""];
    NSMutableArray *arr = [NSMutableArray array];
    for(NSInteger i = 1; !isCommonUnitEmptyArray(arr1) && (i<arr1.count); i++)
    {
        NSString *frontStr = arr1[i-1];
        NSString *afterStr = arr1[i];
        NSString *afterStr2 = [arr1 objectAtSafeIndex:(i+1)];
        [arr addObject:frontStr];
        if(!isCommonUnitEmptyString(frontStr) && !isCommonUnitEmptyString(afterStr))
        {
            if(!isCommonUnitEmptyString(afterStr2))
            {
                if([frontStr isEqualToString:@" controls="] && [afterStr isEqualToString:@"controls"] && [afterStr2 isEqualToString:@" style="])
                {
                    [arr addObject:afterStr];
                    i++;
                    [arr addObject:@" autoplay="];
                    [arr addObject:@"autoplay"];
                }
            }
            else if(!afterStr2)
            {
                [arr addObject:afterStr];
                break;
            }
        }
    }
    NSString *str = @"";
    if(!isCommonUnitEmptyArray(arr))
    {
        str = [NSString stringWithFormat:@"%@", arr[0]];
    }
    else
    {
        return;
    }
    for(NSInteger i = 1; !isCommonUnitEmptyArray(arr) && (i<arr.count); i++)
    {
        NSString *frontStr = arr[i-1];
        NSString *afterStr = arr[i];
        if(!isCommonUnitEmptyString(frontStr) && [frontStr hasSuffix:@"="])
        {
            str = [NSString stringWithFormat:@"%@\"%@\"", str,afterStr];
        }
        else
        {
            str = [NSString stringWithFormat:@"%@%@", str,afterStr];
        }
        
    }
    
    self.Body = str;
}
目录
相关文章
|
2月前
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
70 5
|
1月前
|
自动驾驶 物联网 5G
标题:5G频段解析:低频、中频与毫米波的奥秘
标题:5G频段解析:低频、中频与毫米波的奥秘
264 64
|
1月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
1月前
|
机器学习/深度学习 编解码 算法
深入解析MaxFrame:关键技术组件及其对视频体验的影响
【10月更文挑战第12天】随着流媒体服务和高清视频内容的普及,用户对于视频质量的要求越来越高。为了满足这些需求,许多技术被开发出来以提升视频播放的质量。其中,MaxFrame是一种旨在通过一系列先进的图像处理算法来优化视频帧的技术。本文将深入探讨构成MaxFrame的核心组件,包括运动估计、超分辨率重建以及时间插值算法,并讨论这些技术如何协同工作以改善视频播放效果。
40 1
|
2月前
|
索引 Python
|
3月前
|
数据采集 API 开发工具
淘系商品详情数据解析(属性youhui券sku详情图等)API接口开发系列
在电商领域,特别是像淘宝(淘系)这样的平台,商品详情数据对于商家、开发者以及数据分析师来说至关重要。这些数据包括但不限于商品属性、优惠券信息、SKU(Stock Keeping Unit)详情、商品图片、售后保障等。然而,直接访问淘宝的内部API接口通常需要特定的权限和认证,这通常只对淘宝的合作伙伴或内部开发者开放。 不过,对于需要这些数据的第三方开发者或商家,有几种方式可以间接获取或解析淘系商品详情数据: ——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
3月前
|
JavaScript 前端开发 算法
【Vue秘籍揭秘】:掌握这一个技巧,让你的列表渲染速度飙升!——深度解析`key`属性如何成为性能优化的秘密武器
【8月更文挑战第20天】Vue.js是一款流行前端框架,通过简洁API和高效虚拟DOM更新机制简化响应式Web界面开发。其中,`key`属性在列表渲染中至关重要。本文从`key`基本概念出发,解析其实现原理及最佳实践。使用`key`帮助Vue更准确地识别列表变动,优化DOM更新过程,确保组件状态正确维护,提升应用性能。通过示例展示有无`key`的区别,强调合理使用`key`的重要性。
61 3
|
3月前
|
JSON 前端开发 API
【淘系】商品详情属性解析(属性规格详情图sku等json数据示例返回参考),淘系API接口系列
在淘宝(或天猫)平台上,商品详情属性(如属性规格、详情图、SKU等)是商家在发布商品时设置的,用于描述商品的详细信息和不同规格选项。这些信息对于消费者了解商品特性、进行购买决策至关重要。然而,直接通过前端页面获取这些信息的结构化数据(如JSON格式)并非直接暴露给普通用户或开发者,因为这涉及到平台的商业机密和数据安全。 不过,淘宝平台提供了丰富的API接口(如淘宝开放平台API),允许有资质的开发者或合作伙伴通过编程方式获取商品信息。这些API接口通常需要注册开发者账号、申请应用密钥(App Key)和秘钥(App Secret),并遵守淘宝的API使用协议。
|
3月前
|
数据采集 JSON API
淘系商品详情图属性sku价格解析,API接口系列
淘宝(Taobao)作为阿里巴巴集团旗下的电商平台,其商品详情图、属性、SKU和价格的采集通常不直接通过公开的API接口来实现,因为淘宝的API主要面向商家和开发者提供店铺管理、订单处理、物流查询等功能,并不直接提供商品详情页的完整数据抓取接口
|
3月前
|
XML API 数据库
商品详情数据API接口概念(sku详情图属性等全面的解析)
商品详情数据API接口是指一种编程接口(API, Application Programming Interface),它允许开发者或系统以编程方式获取商品的详细信息,包括但不限于SKU(Stock Keeping Unit,库存量单位)的详细信息、商品图片、商品属性、价格、库存状态、用户评价等。这种接口通常由电商平台、商品数据库服务商或第三方数据提供商提供,旨在帮助开发者或企业快速集成商品数据到其应用程序或系统中。

推荐镜像

更多