微信小程序渲染HTML:wxParse与rich-text的挑战与解决方案

2 下载量 178 浏览量 更新于2024-08-26 收藏 155KB PDF 举报
"在微信小程序中,由于其自身特性,无法直接渲染HTML内容。开发者通常需要借助特定的库或组件来解决这个问题。本文主要探讨了三种解决方案:wxParse、rich-text和web-view,并且详细介绍了在WePY框架下使用wxParse遇到的问题以及如何通过创建新的组件WePYHTML来优化富文本渲染。 一、wxParse wxParse是一个针对微信小程序的第三方库,它的主要作用是将HTML代码解析为小程序能够识别的数据结构,然后利用小程序的模板语言将其渲染出来。这种方法在小程序早期是非常常见的处理富文本的方法,但由于需要手动处理HTML的解析和渲染,可能会增加开发复杂性。 二、rich-text组件 微信小程序后续推出了rich-text组件,允许直接展示富文本内容。然而,rich-text组件的一个显著限制是它禁止了所有子节点的事件处理,这意味着在该组件内部,很多交互功能如图片预览等都无法实现,这对需要交互性富文本的应用来说是一个较大的局限。 三、web-view组件 为了克服rich-text的局限,开发者可以使用web-view组件来嵌入外部网页,从而展示HTML内容。这种方式具有良好的兼容性,但缺点是加载速度慢,因为需要加载额外的页面,可能会影响用户体验。 四、WePYHTML项目 考虑到以上方案的不足,特别是当小程序基于WePY框架开发时,直接使用wxParse会面临兼容性问题。因此,作者决定开发一个新的组件WePYHTML,该组件以WePY的组件模式重新实现了富文本渲染功能,解决了wxParse与WePY框架的兼容问题,同时也优化了图片处理和视频展示,比如支持云存储接口对图片进行缩放,以及更灵活的视频组件集成,以避免UI异常。 在实现过程中,作者采用了“特殊字符分隔法”解析HTML,通过识别HTML的开始和结束符来构建节点树。这种方法能够有效地将HTML字符串转换为可操作的数据结构,从而实现自定义的渲染逻辑。 微信小程序在处理富文本内容时,开发者需要根据具体需求和场景选择合适的解决方案,如使用wxParse、rich-text或web-view,或者像WePYHTML那样自定义组件。在选择过程中,需要权衡性能、交互性、兼容性和代码维护性等多个因素。"
2019-09-23 上传
插件地址:https://github.com/kevenfeng/html-to-wxml如果前端技术比较牛,可以直接看github上面的demo。可以更好的理解用法。使用方法:1.引用插件var R_htmlToWxml = require(‘../../util/htmlToWxml.js’);//引入公共方法2.将html内容转成json数据R_htmlToWxml.html2json(“html内容”);转换后的json格式类型大概如下:3.吐到页面中显示<block wx:for="{{content}}"  wx:for-index="idy"  wx:for-item="cellData">         <block  wx:if="{{cellData.type == 'view'}}">             <view class="p">                 <block  wx:for="{{cellData.child}}" wx:key="text">                     <block  wx:if="{{item.type == 'a'}}">                         <text class="a" data-seccode="{{item.attr['data-seccode']}}" data-secname="{{item.attr['data-secname']}}" bindtap="stockClick">{{item.text}}</text>                     </block>                     <block  wx:else>                         <text>{{item.text}}</text>                     </block>                 </block>             </view>         </block>         <block wx:if="{{cellData.type == 'img'}}">             <image class="img" data-index="{{idy}}" style="height: {{cellData.attr.height?cellData.attr.height:0}}px"  mode="aspectFit" src="{{cellData.attr.src}}" bindload="imageLoad"></image>         </block>     </block>demo效果:由于小程序图片的高度没法自适应,需要给图片设置高度,所以需要在图片加载完以后,获取图片高度,等比算出显示图片高度,赋值给对应图片通常我们抓取的内容是html页面,特别是像资讯这一类的,如果在小程序里面显示文章内容,此插件提供了一种解决方案,希望对大家有用。在客户端中用native显示html页面体验上面没有native的好,htmlToWxml插件给客户端中用native的方式显示html内容提供了一种解决方案