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>  


    最后的效果图如下

  • 相关阅读:
    HDU4474 Yet Another Multiple Problem BFS搜索
    HDU4473 Exam 数学分析
    2013ACM多校联合(4)
    POJ1273 网络流...
    HDU4472 Count 递推
    POJ1149 PIGS 网络流
    UVA10881 Piotr's Ants 想法题
    javascript js string.Format()收集
    修改 设置 vs.net 网站 调试 设为 起始页
    【转】HTML5杂谈 概念与现行游戏 割绳子 宝石迷阵
  • 原文地址:https://www.cnblogs.com/bainiu/p/7833424.html
Copyright © 2011-2022 走看看