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

本文由百牛信息技术bainiu.ltd整理发布于博客园

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

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

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

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

  1. <span style="font-size:18px;"> <span style="white-space:pre">   </span>//替换标签中特殊字符 这里观察返回数据找到非 HTML 字符串,随后将该字符串替换成空字符串.
  2. var infoFlg = "<!--SPINFO#0-->";
  3. if (content.indexOf(infoFlg) > 0) {
  4. content = content.replace(/<!--SPINFO#0-->/, "");
  5. }</span>

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

  1. <span style="font-size:18px;"><span style="white-space:pre">    </span>var imgFlg = "<!--IMG#";
  2. //图片数量
  3. var imgCount = (content.split(imgFlg)).length-1;
  4. if (imgCount > 0) {
  5. console.log("有dd" + imgCount + "张图片");
  6. for (var i = 0; i < imgCount; i++) {
  7. var imgStr = "<!--IMG#" + i + "-->";
  8. var imgSrc = "\"" + imgInfoArr[i].src + "\"";
  9. var imgHTML = "<div> <img style=\"width:100%\" src=" +imgSrc+ "> </div>";
  10. content = content.replace(imgStr, imgHTML);
  11. }
  12. }</span>

最后加载数据,

  1. <span style="font-size:18px;"><span style="white-space:pre">    </span>var article = title + source + content ;
  2. WxParse.wxParse('article', 'html', article, self,imgCount);</span>

wxml 页面代码如下

  1. <span style="font-size:18px;"><import src="../../wxParse/wxParse.wxml"/>
  2. <loading hidden = "{{hide}}">加载中...</loading>
  3. <view class="wxParse">
  4. <template is="wxParse" data="{{wxParseData:article.nodes}}"/>
  5. </view></span>

js 页面详细代码如下:

  1. <span style="font-size:18px;">var WxParse = require('../../wxParse/wxParse.js');
  2. Page({
  3. data: {
  4. },
  5. onLoad: function(options) {
  6. //http://c.m.163.com/nc/article/CADGA4VH0001875N/full.html
  7. var self = this;
  8. var optionId = options.id;
  9. console.log(optionId);
  10. wx.request( {
  11. url: 'http://c.m.163.com/nc/article/' +optionId+ '/full.html',
  12. header: {
  13. "Content-Type": "application/json"
  14. },
  15. method: "GET",
  16. data: {
  17. },
  18. success: function( res ) {
  19. var data = res.data[optionId];
  20. var imgInfoArr = res.data[optionId].img;
  21. //替换标签中特殊字符
  22. var infoFlg = "<!--SPINFO#0-->";
  23. var imgFlg = "<!--IMG#";
  24. var title = " <p style=\"margin:15px 15px; line-height: 20px;\"> " + res.data[optionId].title + "</p>";
  25. var source = " <p style=\"margin:15px 15px; font-size: 14px; color:darkgray \">来源于: " + res.data[optionId].source + "</p>";
  26. 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>";
  27. //替换标签中特殊字符
  28. var infoFlg = "<!--SPINFO#0-->";
  29. if (content.indexOf(infoFlg) > 0) {
  30. content = content.replace(/<!--SPINFO#0-->/, "");
  31. }
  32. var imgFlg = "<!--IMG#";
  33. //图片数量
  34. var imgCount = (content.split(imgFlg)).length-1;
  35. if (imgCount > 0) {
  36. console.log("有dd" + imgCount + "张图片");
  37. for (var i = 0; i < imgCount; i++) {
  38. var imgStr = "<!--IMG#" + i + "-->";
  39. var imgSrc = "\"" + imgInfoArr[i].src + "\"";
  40. var imgHTML = "<div> <img style=\"width:100%\" src=" +imgSrc+ "> </div>";
  41. content = content.replace(imgStr, imgHTML);
  42. }
  43. }
  44. var article = title + source + content ;
  45. WxParse.wxParse('article', 'html', article, self,imgCount);
  46. setTimeout (function () {
  47. self.setData({
  48. hide: true
  49. })
  50. }, 500)
  51. }
  52. });
  53. }
  54. })</span>

最后的效果图如下

微信小程序 加载 HTML 标签的更多相关文章

  1. 微信小程序 加载图片时,先拉长,再恢复正常

    今天在写小程序,发现小程序的图片image如过mode设置为widthFix的话, 加载图片会被先拉伸,后恢复正常 我的处理方法是,给他一个初始的height值,或者就直接 height:auto

  2. 微信小程序加载本地图片方法

    目录结构如下,只要图片按正确的方式放入小程序的开发工具的项目中,即可在wxml文件中用内联样式或者image标签都可以引用本地的图片. 步骤一:微信开发工具 打开项目 步骤二:新建个文件夹(放项目的一 ...

  3. 微信小程序(五)-常见组件(标签)

    常见组件(标签) https://developers.weixin.qq.com/miniprogram/dev/component/ 1.view 代替以前的div标签 2.text 1.文本标签 ...

  4. 利用机器学习实现微信小程序-加减大师自动答题

    之前有看到微信小程序<跳一跳>别人用python实现自动运行,后来看到别人用hash码实现<加减大师>的自动答题领取娃娃,最近一直在研究深度学习,为啥不用机器学习实现呢?不就是 ...

  5. [Cocos Creator]安卓上微信小游戏加载到100%就进不去了

    最近用Cocos Creator 开发微信小游戏,构建发布到微信上,用安卓手机预览打开后加载到100%就不动了,开始以为微信开发工具版本的问题,后来用苹果的手机测试了一下,发现也有同样的问题. 仔细分 ...

  6. mpvue 小程序加载不了图片 Error: Failed to load local image resource /images/xx.png the server responded with a status of 404 (HTTP/1.1 404 Not Found)

    mpvue开发小程序时候,要添加静态本地图片 <img src="../../images/bg.png" alt=""> 会报错: VM14878 ...

  7. mpvue小程序加载不出图片 Failed to load local image resource /images/xx.png

    解决方法: 直接写 /static/img/xx.png(一定要从 "/static" 开始,不要写成 "../../static" ,当然static里面也可 ...

  8. 小程序加载大图片 使用widthFix时,图片先拉伸然后才显示完全

    <image src="http://www.ll.com/sss.jpg" mode="widthFix" style="width:180r ...

  9. mpvue小程序加载不出图片 Failed to load local image resource

    我的GitHub博客,很多内容可以看,喜欢的给星星哦 https://github.com/liangfengbo/frontend 第一道:图片引入本地静态文件失效? mpvue开发小程序时候,要添 ...

随机推荐

  1. struts2 文件上传和下载,以及部分源代码解析

    struts2 文件上传 和部分源代码解析,以及一般上传原理 (1) 单文件上传 一.简单介绍 Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理multipart/form ...

  2. Oracle SQL性能优化 - 根据大表关联更新小表

    需求: 小表数据量20w条左右,大表数据量在4kw条左右,需要根据大表筛选出150w条左右的数据并关联更新小表中5k左右的数据. 性能问题: 对筛选条件中涉及的字段加index后,如下常规的updat ...

  3. 【Linux】 awk应用

    1  统计机器上处于不同状态的所有TCP连接的个数(TCP连接是有状态连接,包含SYN_RECV, ESTABLISHED, TIME_WAIT, FIN_WAIT0, FIN_WAIT1等多种状态, ...

  4. Spark源码分析之三:Stage划分

    继上篇<Spark源码分析之Job的调度模型与运行反馈>之后,我们继续来看第二阶段--Stage划分. Stage划分的大体流程如下图所示: 前面提到,对于JobSubmitted事件,我 ...

  5. 华为p20:拍美景,听讲解,旅行更智能

    华为P20轰轰烈烈地上市了,本来对手机并不感冒的我,看到身边的好友换了P20,不禁感慨:这个月的活又要白干了,全部都要上交给华为,因为这款手机完全戳中了旅游爱好者的痛点. 痛点一:丢弃笨重的单反,手机 ...

  6. ubuntu14.04设置sublime text3为默认文本编辑器

    更新时间2017年07月20日17:35:04 原来的方法貌似并不试用,现在才发现,其实ubuntu下也和Windows下一样... 右键,属性,然后如图所示 set as default 即可. 之 ...

  7. C语言补漏(1)--- char到int赋值的一个陷阱

    作为一个C的新手(虽然学的第一门语言就是C,可是用C实际开发项目却是最近的事情),对使用C过程中遇到的各类问题.疑惑.知识漏洞进行弥补无疑是非常有必要的,于是决定将每次遇到的知识漏洞写到博客上. 今天 ...

  8. EasyNVR H5无插件摄像机直播解决方案前端解析之:监控实时直播的四分屏的前端展示

    完成运行效果图: 一.四分屏展示样式布局 1.通过html.css等来进行样式排版 根据需求的四分屏的样式:来合理的划分出四个大块,分别用于放置四个播放器: 以四等分结构为例进行前端的排版: html ...

  9. js实现网页中的"运行代码"功能

    <!DOCTYPE html> <html> <head> <meta charset='utf8' /> <title>网页中的运行代码功 ...

  10. LeetCode——Binary Tree Postorder Traversal

    Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...