无需webview让小程序内显示任意公众号文章

微信小程序内显示任意公众号文章(无需webview)

实现原理

  • 小程序官方提供的<rich-text>组件
  • 微信公众号文章可以在浏览器打开
  • 小程序内wx.request可以访问微信公众号域名

什么是richtext

大家可以看官方文档,简单来说就是在小程序内静态的去渲染html格式的文本
(注意这和webview是完全不同的,rich-text渲染的html,没有任何交互功能,但是可以反应对应的css)
微信官方开放文档:rich-text

实现过程

1.找到对应文章链接

很简单,在微信打开对应的文章,然后在浏览器打开或者直接拷贝链接,那我们就获取到文章地址了。

2.在小程序内获取到文章的html文稿

在使用小程序的wx.request之前,需要确保后台添加了对应的请求域名,在下图对应区域添加微信公众号的域名,当前是https://mp.weixin.qq.com,注意只有https是支持的!请添加图片描述
接着我们就可以尝试用wx.request去获取html,像这样:
请添加图片描述
请添加图片描述
按理来说,如果是一个静态页面,那content里就是对应的html文本,然后放在rich-text组件就完事了,但是结果你会发现,界面只出现了标题,其他是一片空白。

难道网页的html是动态加载的吗?

很幸运,博主通过搜索文章中间的文字内容,发现文章的内容确实都在获取到的html文本之中,所以官方平台只是用一定的方法隐藏了对应的内容。

解除隐藏限制

一般来讲html想要隐藏标签内容,无非几种简单手段,通过设置displayopacity等css属性,而很巧的是微信公众的文章css也都直接写在标签的style里,这让我们的处理方便了很多。

用浏览器打开我们获取到的html文本,再打开浏览器开发者工具,找出对应属性,进行调试修改。通过修改style属性,问题轻松解除了。我们只需要去掉html中的visibility: hidden; opacity: 0;字段,就成功了。
但是结果并不是,博主发现图片并没有成功显示。

难道是微信公众号对图片做了跨域限制吗?

很幸运,并不是,如果真的做了跨域限制,那我们所有的努力都泡汤了。
html只是把img标签的src属性改成了data-src,那我们只要用一个replace替换就搞定了!

最后我们破解限制的代码:

html = html .slice(start,end)
html = html.replace('visibility: hidden; opacity: 0;','').replaceAll('data-src','src')

当然我们可以去掉一些html里没用的内容:

const start = res.data.indexOf('<div id="img-content"')
        const end = res.data.indexOf('<div id="js_tags_preview_toast"')

这里我们截取了文章的核心标签

最终代码

wx.request({
      url: url,  //这里替换你的文章链接
      method:'GET',
      success:res=>{
        var html = res.data
        const start = res.data.indexOf('<div id="img-content"')
        const end = res.data.indexOf('<div id="js_tags_preview_toast"')
        html = html .slice(start,end)
        html = html.replace('visibility: hidden; opacity: 0; ','').replaceAll('data-src','src')
        // console.log(html)

        this.setData({
          content:html,
          loading:false
        })
      }
    })
<rich-text style="padding: 1em;" nodes="{{content}}"/>

欢迎大家学习点评,如有转载请标注来源,如有侵权请私信

  • 26
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Freshman小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值