搞定了微信小程序富文本渲染解決方案-後端渲染方案Html2Wxml2J

先介紹一下最近遇到的問題:

最近小程序項目中有文章詳情頁需要渲染富文本,微信小程序官方提供的<rich-text>是個弱雞,很多標籤不支持,用起來也麻煩,性能也不咋地。

吐槽完了,我們決定尋找其他方案-wxParse,一個小程序前端使用的javascript庫,前端直接轉換渲染。使用到了微信小程序的模板渲染,但是依然弱雞,經常出現各種Javascript錯誤,很多標籤不兼容。

 

我們的需求是

一篇文章詳情圖文Html標籤正常解析,就連視頻和音頻,常見Html標籤,代碼標籤都要渲染出來。

 

起初,我想的也是在微信小程序端,使用JavaScript處理這些編譯渲染的工作,或者拿到WxParse的代碼去改改。

無奈,我的JavaScript水平雖然不是弱雞,單也耗時費力。於是我就轉變思路尋找服務器端的解決方案,將需要渲染的Html在後端處理好,然後前端根據配置的模板動態渲染。

這個思路敲定以後,非常幸運地在開源中國碼雲裏找到了一個靠譜的項目-html2wxml 

這個項目有好幾種使用方式:

第一種、插件版

1、需要使用者在微信小程序後臺,添加html2wxml這個第三方插件服務,在小程序裏配置一下這個插件,就能自動加載和使用了,非常方便。

2、添加完插件後,需要在微信小程序項目裏配置一下這個插件:注意version版本號和appid

代碼如下:

 "plugins": {
 	"htmltowxml": {
 		"version": "1.3.0",
 		"provider": "wxa51b9c855ae38f3c"
 	}
 }

3、然後,在對應需要使用這個插件渲染Html富文本的頁面,找到對應的JSON文件,加入一個聲明:代碼如下

這樣,插件版的使用配置就完成了,剩下的就是如何具體在頁面中使用這個插件去渲染了。

 

在我們自己的小程序項目中找到頁面對應的JavaScript文件,添加一個模擬讀取外部Html的過程:

我們讀取到Html後賦值爲本頁面定義的一個數據變量“html”;

然後在對應的Index.wxml中 加入插件提供的調用方式:

直接把Html變量丟給這個組件的text屬性就可以了,其他屬性可以去html2wxml的碼雲站點看文檔說明。

 

我們來看一下成果:

第一個是在瀏覽器裏查看的效果:

再來看看 小程序裏插件版的轉換效果:是不是一毛一樣~~

 

好了,講到這裏大家都明白Html2Wxml是幹什麼的了,也知道如何使用了,這裏我們發現一個問題,這個插件版如何給我們轉換的代碼呢?

看看NetWork就知道了:看下圖,原來是插件自動將html代碼發給插件提供的服務接口,將html轉成了JSON格式的NODE節點數據,然後交給了插件在小程序解析渲染。

那麼,問題來了:我線上的應用都是用官方提供的這個接口服務器地址,萬一哪天扛不住掛了怎麼辦,小程序不也跟着廢了嗎?

這個問題,作者當然想到啦~~~

二、除了插件版,作者還提供了另外兩個版本 模板版本和自建服務器組件版,這兩個版本都需要下載一套代碼集成到微信小程序的項目中。

1、模板版本的我這裏就不講了,官方有文檔 我先截個圖過來

2、自建服務器組件版,需要下載整套HTML2Wxml組件版的源代碼,集成到我們現在的微信小程序項目中。

這裏下載有兩個選擇,一個是PHP版本,一個是Java版本 其中PHP版本是html2wxml的作者寫的,目前插件版訪問的就是後端PHP版本。

但是,我是搞Java的小夥兒,PHP略懂。。。 自己搭建完也正常使用了,但是總覺不爽,於是我就寫了一個Java版的後端轉換程序,並且開源了。

哎呀,媽呀,寫了這麼多終於說到自己了~~

 

三、實戰實戰

項目地址https://www.oschina.net/p/html2wxml4j

具體用法也很簡單:

1、首先,下載組件源碼 集成到小程序項目中 直接拿截圖吧

注意組件版的代碼放的位置,我是放在了和Pages在同一級目錄下,然後跟插件版不一樣的是在Index.json中的引用配置,具體的存放路徑。

 

其實默認,如果到此位置,也就是用了組件版替換了插件版,但是最後調用的服務器接口,還是官方提供的,在上圖的文件裏可以找到這個地址。

那麼如果,我們需要自己使用自己部署的後端服務,就需要下載Java版或者Php版本的接口源碼,自己部署後,在這裏替換掉接口地址就行了。

2、下載Html2wxml4J的源碼

源碼是JFinal+JSoup+FastJson開發的,JFinal作爲Controller層,如果有使用Spring系列的 可以幾分鐘內參照JFinal的Controller 改掉。

主要就是這個IndexController,接口的入口處理器,在這裏主要傳遞的就是text參數。

直接右鍵 run as,啓動MainConfig.java,80端口。

使用http://127.0.0.1 就可以訪問了。

不傳任何數據,返回空的數組(廢話~~)。

text參數傳遞過來一個h1標籤,轉換成下面的節點數據。

這些數據 在小程序裏使用組件可以直接解析了。

 

那我再把微信小程序裏組件上的接口地址改成 這個http://127.0.0.1.

去看看轉換的效果~~

 

好了,終於搞定了,這樣就完成了一個從服務端解析渲染Wxml的方案,而且還是Java版的哦~~

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章