整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

rich-text无法解析link标签

本文链接:

展开

小程序的rich-text富文本标签不支持link标签,这就导致我们从京东商城拿到的商品详情富文本无法解析。

rich-text组件用法

小程序商城对接京东商城商品,拿到的京东商品详情的富文本数据格式如下:

小程序富文本解决方案_富文本原理_富文本存储方案

我们可以看到,拿到的商品详情并不是我们所想的img标签 而是通过link标签再次去请求css样式,可以看出上面有多个div,这也就是说明了图片是通过div当成背景图渲染出来的,我们来看看link的样式,看下图:

富文本原理_富文本存储方案_小程序富文本解决方案

这就导致小程序无法解析京东的商品详情数据,我们直接来看解决办法,目前我想到的有两个解决方案,我们先来看最简单的第一个(我目前已经实现的方案)

第一方案:小程序实现的完整代码


 
 
  1. if(that.dataObj.warehouseContent){
  2. // 匹配link标签href属性的值
  3. let css = that.dataObj.warehouseContent.match( //)[ 1]
  4. wx.downloadFile({
  5. url: `https:${css}`, // 把京东的css下载到本地
  6. success (res) {
  7. if (res.statusCode === 200) {
  8. // 读取本地文件内容
  9. wx.getFileSystemManager().readFile({
  10. filePath:res.tempFilePath, // 本地css文件地址
  11. encoding: 'utf8', // 通过utf8解析
  12. success(data){
  13. if(!data.data){
  14. return
  15. }
  16. // 匹配url的内容 匹配出来的格式是---> url(xxx.jpg)
  17. let matchData = data.data.match( /url\((.+?)*\)/g )
  18. let imgs = ''
  19. for( let matchDataIndex in matchData){
  20. // 去掉‘url(’,转换后的格式是---> xxx.jpg)
  21. let oneSubstr = matchData[matchDataIndex].substr( 4)
  22. // 去掉最后的)括号 转换后的格式是---> xxx.jpg
  23. 小程序富文本解决方案_富文本存储方案_富文本原理

    let twoSubstr = oneSubstr.substr( 0,oneSubstr.length -1)
  24. // 然后把图片url拼接到img标签上 转换后的格式是---> 富文本原理_富文本存储方案_小程序富文本解决方案
  25. imgs+= `富文本存储方案_小程序富文本解决方案_富文本原理${twoSubstr}">`
  26. }
  27. that.dataObj.warehouseContent = that.dataObj.warehouseContent + imgs
  28. that.$apply()
  29. },
  30. fail(err){
  31. console.log( 'err',err)
  32. }
  33. })
  34. }
  35. }
  36. })
  37. }

上面是实现功能的完整代码

下面是对代码的分析

that.dataObj.是京东商品详情富文本内容,我们先通过正则表达式解析把link标签的href属性值解析出来(变量:css),然后下载(wx.)京东的css样式文件到本地,不懂wx.怎么使用的可以移步到微信小程序官方api文档

富文本原理_富文本存储方案_小程序富文本解决方案

点击了解:wx.使用方法

res.是css文件下载到本地文件所在的位置,再通过文件管理器读取本地文件内容,我们需要读取css文件的样式内容


 
 
  1. wx.getFileSystemManager().readFile({
  2. filePath:res.tempFilePath, // 本地css文件地址
  3. encoding: 'utf8', // 通过utf8解析
  4. success(data){
  5. console.log( '拿到css文件内容:',data.data)
  6. },
  7. fail(err){
  8. console.log( 'err',err)
  9. }
  10. })

富文本存储方案_小程序富文本解决方案_富文本原理

关于文件管理器(wx.)的用法请移步到微信小程序官方api:点击了解:wx.使用方法

data.data是我们的样式内容,这个时候我们使用正则把图片url匹配下来,重新拼接到img标签上:


 
 
  1. // 匹配url的内容 匹配出来的格式是---> url(xxx.jpg)
  2. let matchData = data.data.match( /url\((.+?)*\)/g )
  3. let imgs = ''
  4. for( let matchDataIndex in matchData){
  5. // 去掉‘url(’,转换后的格式是---> xxx.jpg)
  6. let oneSubstr = matchData[matchDataIndex].substr( 4)
  7. // 去掉最后的)括号 转换后的格式是---> xxx.jpg
  8. let twoSubstr = oneSubstr.substr( 0,oneSubstr.length -1)
  9. // 然后把图片url拼接到img标签上 转换后的格式是---> 富文本原理_富文本存储方案_小程序富文本解决方案
  10. imgs+= `富文本存储方案_小程序富文本解决方案_富文本原理${twoSubstr}">`
  11. }
  12. // 处理好的图片数据重新赋值回去
  13. that.dataObj.warehouseContent = that.dataObj.warehouseContent + imgs

如果有不理解的可以看看我在代码上面写的注释,或者在下方评论。

方案二(还未实践,稍微复杂,但是实现的最终效果一样)

我们知道,小程序rich-text组件并不支持link标签和style标签,我尝试过下载京东的样式文件到本地,通过这里插入京东的样式文件,然后拼接到富文本内,但是这个方法并不可行,因为小程序rich-text组件不支持style标签,但是还有一种稍微复杂的方案,我们用正则匹配把每个类名对应花括号里面的样式解析下来,然后再渲染进div标签的style属性内,这种方式是可行的,但是会复杂一些,我们来看一下结构


 
 
  1. .ssd-module-wrap .ssd-module,
  2. .ssd-module-wrap .ssd-module-heading {
  3. width: 640px;
  4. position: relative;
  5. overflow: hidden;
  6. }


 
 
  1. <div class="ssd-module" style="width: 640px;position: relative;overflow: hidden;"> div>
  2. <div class="ssd-module-heading" style="width: 640px;position: relative;overflow: hidden;"> div>

目前想到实现的方式就这两种,希望能帮助到你们!

另外你们可以关注下我的微信个人公众号“程序员小鸿”,有什么问题直接来公众号留言扣我哟!

中国移动电话手表免费送的套路

近期中国移动推出防走失公益活动,电话手表免费送。经过搜索发现,网络上有很多的类似消息,骗子公司冒充公益活动对消费者实施欺诈,对我们的这个公益项目产生较大的影响,特此截图网络上流行的骗术,大家需要防范!

1、百度搜索截图,全是骗子的行骗方式,大家特别注意,不要入坑!

手表办儿童卡电话要钱吗_儿童电话手表要办卡吗_办理儿童电话手表的卡需要什么

2、隐性捆绑消费,害人不浅。

手表办儿童卡电话要钱吗_办理儿童电话手表的卡需要什么_儿童电话手表要办卡吗

3、承诺最低消费,否则违约了要缴纳巨额费用。

办理儿童电话手表的卡需要什么_手表办儿童卡电话要钱吗_儿童电话手表要办卡吗

4、用几块钱的虚假手表模型,让客户缴纳巨额的快递费,实施诈骗。

儿童电话手表要办卡吗_手表办儿童卡电话要钱吗_办理儿童电话手表的卡需要什么

5、又是一个两年合约的隐形消费,害人不浅!

办理儿童电话手表的卡需要什么_儿童电话手表要办卡吗_手表办儿童卡电话要钱吗

6、新闻报道诈骗详情

儿童电话手表要办卡吗_办理儿童电话手表的卡需要什么_手表办儿童卡电话要钱吗

手表办儿童卡电话要钱吗_办理儿童电话手表的卡需要什么_儿童电话手表要办卡吗

上面这些是当前市场上的欺诈行为的总结,请大家不要入坑!

中国移动防走失宝贝计划公益行, 儿童电话手表免费!送请认准正规平台,以免上当受骗。

正规活动宣传单页正面

办理儿童电话手表的卡需要什么_手表办儿童卡电话要钱吗_儿童电话手表要办卡吗

正规活动宣传单页反面

儿童电话手表要办卡吗_办理儿童电话手表的卡需要什么_手表办儿童卡电话要钱吗

中国移动公益行

电话手表免费送

儿童电话手表专属套餐

每个月300分钟+300M

150元6个月,200元12个月

手表办儿童卡电话要钱吗_儿童电话手表要办卡吗_办理儿童电话手表的卡需要什么

现场免费选号、免费办卡、为保护家长隐私无需实名、充值相应套餐, 即可获得图片同款电话手表

儿童电话手表要办卡吗_手表办儿童卡电话要钱吗_办理儿童电话手表的卡需要什么

手表办儿童卡电话要钱吗_办理儿童电话手表的卡需要什么_儿童电话手表要办卡吗

儿童电话手表要办卡吗_办理儿童电话手表的卡需要什么_手表办儿童卡电话要钱吗

明明白白消费,绝无套路,绝无隐形消费,1年内不用缴纳任何费用,不做任何捆绑,电话手表(智能防水电话手表)+电话卡(中国移动卡)+电话费(充值的专属套餐)=通通都是你的,质量问题只换不修,续费以旧换新!

我们的愿望是让中国的每一个儿童,不论是市区县城还是农村乡镇和山村家庭,都能拥有属于自己的儿童智能电话手表。

办理儿童电话手表的卡需要什么_儿童电话手表要办卡吗_手表办儿童卡电话要钱吗

手表办儿童卡电话要钱吗_办理儿童电话手表的卡需要什么_儿童电话手表要办卡吗