zoukankan      html  css  js  c++  java
  • 微信小程序 加载 HTML 标签

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

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

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

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

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

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

    [html] view plain copy
     
    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 标签就解决了.

    [html] view plain copy
     
    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.             
    7.           for (var i = 0; i imgCount; i++) {  
    8.             var imgStr = "<!--IMG#" + i + "-->";  
    9.             var imgSrc = """ + imgInfoArr[i].src + """;   
    10.             var imgHTML = "<div<img style="100%" src=" +imgSrc+ "</div>";  
    11.             content = content.replace(imgStr, imgHTML);  
    12.           }  
    13.         }</span>  


    最后加载数据,

    [html] view plain copy
     
    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 页面代码如下

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


    js 页面详细代码如下:

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


    最后的效果图如下

  • 相关阅读:
    24 Scrapy爬虫的基本使用
    22 Scrapy框架简介
    21 Scrapy框架的安装
    19 正则表达式的基本知识
    18 “中国大学排名定向爬虫”实例介绍
    17 基于bs4库的HTML内容查找方法
    16 信息标记形式及信息提取的一般方法
    python中with as语句的用法
    Firefox安装Charles配置https后无法上网解决方案(转载)
    Windows下(Win10)Charles从下载安装到证书设置和浏览器抓包测试,亲测有效!(转载)
  • 原文地址:https://www.cnblogs.com/bainiu/p/7833424.html
Copyright © 2011-2022 走看看