微信小程序 加載 HTML 標籤

確定有小夥伴遇到過這個問題:加載的數據是一堆HTML 標籤尷尬這就尷尬了,由於小程序沒有提供 webview 來加載這些 HTML.可是不用慌,小程序不提供咱們能夠本身造個新輪子,本身造不出新輪子我們找到一個合適的輪子拿來用!這裏用到的輪子就是這個:wxParse.他的介紹能夠去 github 主頁學習,這裏簡要記錄使用過程.(項目地址連接)html

 本文由百牛信息技術bainiu.ltd整理髮佈於博客園node

接口是截取的網易新聞的新聞詳情接口,數據格式你們自行格式化觀察.這裏在作 HTML 處理的時候遇到了兩個小問題.git

1.返回數據中包含非 HTML 標籤的內容,這會致使加載數據時解析失敗.github

2.一些新聞詳情會有配圖,配圖的位置是經過一些標識字符串加到內容裏,不是直接加載出來.web

 

首先來看第一個問題.其實這個問題很好解決,直接獲取到要加載的內容,找到這些非 HTML 字符串將他們替換成空字符串,問題就迎刃而解了.下面是關鍵的代碼;json

 

[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=\"width:100%\" src=" +imgSrc+ "</div>";  
  11.             content = content.replace(imgStr, imgHTML);  
  12.           }  
  13.         }</span>  


最後加載數據,app

 

 

[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 頁面代碼以下ide

 

[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=\"width: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>  


最後的效果圖以下

 

相關文章
相關標籤/搜索