uniapp中解析markdown支持網(wǎng)頁和小程序?qū)崿F(xiàn)示例
正文
對于markdown
相信大家都不陌生,日常寫文檔或日常記錄都用到的比較多,書寫的是markdown
的格式,實時預(yù)覽的是轉(zhuǎn)換后的html
樣式。本次實現(xiàn)的需求是在uniapp
中轉(zhuǎn)換markdown
文本展示在不同的平臺,主要平臺是瀏覽器使用和微信小程序使用。
對于這兩個平臺目前沒有一個比較通用的解決方案,本次實現(xiàn)也是針對不同的平臺單獨實現(xiàn),以下就是具體的實現(xiàn)過程。
瀏覽器實現(xiàn)
瀏覽器實現(xiàn)主要基于marked
,由于文本中會存在對代碼的轉(zhuǎn)換,所以還需要增加highlight.js
處理代碼高亮的情況。另外為了保障HTML的安全性,增加了DOMPurify
庫過濾HTML,DOMPurify
可過濾不可信HTML和保護(hù)應(yīng)用程序免受惡意用戶輸入來幫助防止跨站腳本攻擊(XSS攻擊)。
核心依賴包安裝如下:
npm install marked --save npm install dompurify --save npm install highlight.js --save
核心依賴包引用如下:
import { marked } from 'marked'; import DOMPurify from 'dompurify'; import hljs from "highlight.js/lib/common"; // 代碼主體樣式文件 import 'highlight.js/styles/github.css';
marked
使用前先進(jìn)行初始配置初始化:
marked.setOptions({ renderer: new marked.Renderer(), highlight: function(code) { return hljs.highlightAuto(code).value; }, pedantic: false, gfm: true, tables: true, breaks: false, sanitize: false, smartLists: true, smartypants: false, js: false });
然后即可對原始markdown
文本進(jìn)行html
轉(zhuǎn)換和安全過濾:
this.html = DOMPurify.sanitize(marked.parse(text));
轉(zhuǎn)換之后的數(shù)據(jù)在html
中渲染展示:
<div v-html="parseHtml"></div>
到此瀏覽器端實現(xiàn)就完成了,基本實現(xiàn)流程相對比較簡單。默認(rèn)引入的樣式不一定滿足需求,可通過覆蓋樣式重寫,這個在小程序端也是同理。
微信小程序?qū)崿F(xiàn)
微信小程序里面實現(xiàn)較為復(fù)雜一些,主要是基于Towxml 3.0
實現(xiàn)。首先需要克隆項目到本地或直接到項目地址下載壓縮包。
git clone https://github.com/sbfkcel/towxml.git
安裝依賴后在本地執(zhí)行build編譯代碼
npm install npm run build
新構(gòu)建出來的文件在dist
目錄下,把構(gòu)建好的文件夾dist
改名為towxml
,在uni-app
項目根目錄中新建wxcomponents
目錄,將towxml
復(fù)制進(jìn)去即可。
towxml/decode.json
中默認(rèn)引入的組件依賴有些是用不上的,可以根據(jù)實際的情況進(jìn)行刪改。
{ "component": true, "usingComponents": { "decode": "./decode", "audio-player": "./audio-player/audio-player", "echarts": "./echarts/echarts", "latex": "./latex/latex", "table": "./table/table", "todogroup": "./todogroup/todogroup", "yuml": "./yuml/yuml", "img": "./img/img" } }
下一步需要在需要使用的頁面pages.json
中添加組件配置,引入towxml
組件。
{ "path": "pages/page/page", "style": { "usingComponents": { "towxml": "/wxcomponents/towxml/towxml" } }
由于本次需求中會在多個頁面中使用,已經(jīng)將markdown
抽離到公共組件。所以將其配置到全局globalStyle
中:
"globalStyle": { // #ifdef MP-WEIXIN "usingComponents": { "towxml": "/wxcomponents/towxml/towxml", "decode": "/wxcomponents/towxml/decode" }, // #endif }
在html
中使用towxml
組件
<towxml :nodes="html" />
在JS中markdown
轉(zhuǎn)換賦值:
import towxml from "../wxcomponents/towxml/index.js" this.html = towxml(text, 'markdown')
到此基本的轉(zhuǎn)換功能就實現(xiàn)完成了,由于小程序端和瀏覽器端是通過不同的實現(xiàn)方式,導(dǎo)致對應(yīng)展示的UI也有所區(qū)別,小程序端的UI重寫可以修改 wxcomponents / towxml / style / theme
中的樣式文件即可。
上線效果預(yù)覽:
最后
本文介紹了如何在uni-app
框架中解析Markdown
,并且支持在網(wǎng)頁和小程序端展示。在小程序端的實現(xiàn)過程還是踩了不少坑,瀏覽器端實現(xiàn)相對簡單也比較成熟,有興趣的可以自己嘗試看看。
更多關(guān)于uniapp解析markdown的資料請關(guān)注腳本之家其它相關(guān)文章!
- python使用html2text庫實現(xiàn)從HTML轉(zhuǎn)markdown的方法詳解
- python 自動化將markdown文件轉(zhuǎn)成html文件的方法
- Python?mistune庫靈活的Markdown解析器使用實例探索
- Python自動創(chuàng)建Markdown表格使用實例探究
- 微信小程序?qū)崿F(xiàn)動態(tài)渲染Markdown示例詳解
- 一款功能強大的markdown編輯器tui.editor使用示例詳解
- umi插件開發(fā)仿dumi項目加載markdown文件實現(xiàn)詳解
- unified如何處理markdown解析器詳解
- python markdown轉(zhuǎn)html自定義實現(xiàn)工具解析
相關(guān)文章
IOS中safari下的select下拉菜單文字過長不換行的解決方法
今天在項目開發(fā)中遇到一個問題safari下的select下拉菜單文字過長不換行問題,最終我用<optgroup>標(biāo)簽解決此問題,下面小編把實現(xiàn)思路分享給大家供大家參考2016-09-09詳解JavaScript 中 if / if...else...替換方式
這篇文章主要介紹了JavaScript 中 if / if...else...替換方式 ,非常不錯,這篇文章是小編給大家做的一個方法匯總,感興趣的朋友一起看看吧2018-07-07在knockoutjs 上自己實現(xiàn)的flux(實例講解)
下面小編就為大家分享一篇在knockoutjs 上自己實現(xiàn)的flux方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12