微信小程序 加载 HTML 标签

肯定有小伙伴遇到过这个问题:加载的数据是一堆HTML 标签尴尬这就尴尬了,因为小程序没有提供 webview 来加载这些 HTML.但是不用慌,小程序不提供我们可以自己造个新轮子,自己造不出新轮子咱们找到一个合适的轮子拿来用!这里用到的轮子就是这个:wxParse.他的介绍可以去 github 主页学习,这里简要记录使用过程.(项目地址链接)


接口是截取的网易新闻的新闻详情接口,数据格式大家自行格式化观察.这里在做 HTML 处理的时候遇到了两个小问题.

1.返回数据中包含非 HTML 标签的内容,这会导致加载数据时解析失败.

2.一些新闻详情会有配图,配图的位置是通过一些标识字符串加到内容里,不是直接加载出来.


首先来看第一个问题.其实这个问题很好解决,直接获取到要加载的内容,找到这些非 HTML 字符串将他们替换成空字符串,问题就迎刃而解了.下面是关键的代码;

 	//替换标签中特殊字符 这里观察返回数据找到非 HTML 字符串,随后将该字符串替换成空字符串.
        var infoFlg = "<!--SPINFO#0-->";
        if (content.indexOf(infoFlg) > 0) {
         content = content.replace(/<!--SPINFO#0-->/, "");
        }


第二个问题思路也是这样,将标识图片位置的非 HTML 字符串替换成 HTML 标签就解决了.

	var imgFlg = "<!--IMG#";
        //图片数量
        var imgCount = (content.split(imgFlg)).length-1; 
        if (imgCount > 0) {
          console.log("有dd" + imgCount + "张图片");  
          
          for (var i = 0; i < imgCount; i++) {
            var imgStr = "<!--IMG#" + i + "-->";
            var imgSrc = "\"" + imgInfoArr[i].src + "\""; 
            var imgHTML = "<div> <img style=\"width:100%\" src=" +imgSrc+ "> </div>";
            content = content.replace(imgStr, imgHTML);
          }
        }

最后加载数据,

	var article = title + source + content ;
        WxParse.wxParse('article', 'html', article, self,imgCount);


wxml 页面代码如下

<import src="../../wxParse/wxParse.wxml"/> 

<loading hidden = "{{hide}}">加载中...</loading>

<view class="wxParse">
    	<template is="wxParse" data="{{wxParseData:article.nodes}}"/>
</view>


js 页面详细代码如下:

var WxParse = require('../../wxParse/wxParse.js');

Page({

  data: {
  },

onLoad: function(options) {
    
    //http://c.m.163.com/nc/article/CADGA4VH0001875N/full.html
    var self = this;
    var optionId = options.id;
    console.log(optionId);
    wx.request( {
      url: 'http://c.m.163.com/nc/article/' +optionId+ '/full.html',
      header: {
        "Content-Type": "application/json"
      },
      method: "GET",
      data: {
        
      },
      success: function( res ) {

        var data = res.data[optionId];
        var imgInfoArr = res.data[optionId].img;

        //替换标签中特殊字符
        var infoFlg = "<!--SPINFO#0-->";
        var imgFlg = "<!--IMG#";
        var title = " <p style=\"margin:15px 15px; line-height: 20px;\"> " + res.data[optionId].title + "</p>";
        var source = " <p style=\"margin:15px 15px; font-size: 14px; color:darkgray \">来源于: " + res.data[optionId].source + "</p>";
        var content = "<div style=\"margin:10px; line-height:25px; font-weight:200; font-size:17px; color:black; word-break:normal\">" + res.data[optionId].body + "</div>";

         //替换标签中特殊字符
        var infoFlg = "<!--SPINFO#0-->";
        if (content.indexOf(infoFlg) > 0) {
         content = content.replace(/<!--SPINFO#0-->/, "");
        }

        var imgFlg = "<!--IMG#";
        //图片数量
        var imgCount = (content.split(imgFlg)).length-1; 
        if (imgCount > 0) {
          console.log("有dd" + imgCount + "张图片");  
          
          for (var i = 0; i < imgCount; i++) {
            var imgStr = "<!--IMG#" + i + "-->";
            var imgSrc = "\"" + imgInfoArr[i].src + "\""; 
            var imgHTML = "<div> <img style=\"width:100%\" src=" +imgSrc+ "> </div>";
            content = content.replace(imgStr, imgHTML);
          }
        }

        var article = title + source + content ;
        WxParse.wxParse('article', 'html', article, self,imgCount);


        setTimeout (function () {
          self.setData({
          hide: true
        })
        }, 500)
      }
    });
}

})

最后的效果图如下




  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值