Vue 百度富文本的使用___

一.頁面引入富文本

前期工作,訪問百度富文本官網(wǎng)下載相應的百度富文本文件,根據(jù)后端用的技術下載相應的版本,建議下載最新版UTF-8版官方下載地址,基于官方從2016年就再也沒有維護,網(wǎng)盤下載地址,上次項目使用自己配置的一套

{A3629CA9-0141-4415-BA7D-E419710DB541}_20191029164048.jpg

將下載好的文件解壓,存放在項目位置下:
如果是在vue腳手架中集成百度富文本框,則將解壓后選取部分文件(jsp文件夾和index.html不要,jsp文件夾是后臺的東西)新建文件夾UE,放在其下面,之后放在與index.html平行下的static文件夾下地方如圖所示:

1374211-20190711225057303-1139605551.png

1374211-20190711225440493-1451157932.png

修改UE下ueditor.config.js中的路徑

ueditor.config.png

在項目main.js中引入UE下的js

main.jpg

基本配置完成,寫編輯器組件

<template>
  <div>
    <script id="editor" type="text/plain"></script>
  </div>
</template>
<script>
export default {
  name: 'UE',
  data() {
    return {
      editor: null
    };
  },
  props: {
    defaultMsg: {
      type: String
    },
    config: {
      type: Object
    }
  },
  mounted() {
    const _this = this;
    this.editor = UE.getEditor('editor', this.config); // 初始化UE
    this.editor.addListener('ready', function() {
      _this.editor.setContent(_this.defaultMsg);    // 確保UE加載完成后,放入內(nèi)容。
    });
  },
  methods: {
      // 獲取內(nèi)容方法,獲取的html內(nèi)容
    getUEContent() {
      return this.editor.getContent();
    },
  // 獲取純文本內(nèi)容方法
    getUEContentTxt() {
      return this.editor.getContentTxt();
    }
    setUEContent(value) {
      // 注入內(nèi)容的方法
      //先清空
      this.editor.execCommand('cleardoc');
      //寫入html方法
      this.editor.execCommand('inserthtml', value);
       //直接寫入內(nèi)容
      // this.editor.setContent(value);
    },
    // 清空內(nèi)容的方法
    deleteUEContent() {
      this.editor.execCommand('cleardoc');
    },
    // 判斷編輯器是否為空
    isEmit() {
      return this.editor.hasContents();
    },
    // 查看編輯器源碼和可視化
    queryCommandState() {
      return this.editor.queryCommandState('source');
    },
    // 切換編輯器源碼和可視化
    changeCommandState() {
      this.editor.execCommand('source');
    }
  },
  destroyed() {
    this.editor.destroy();
  }
};
</script>

此時已經(jīng)是一個普通Vue組件,在模塊中使用,剛封裝好的百度富文本編輯器.vue組件,引入路徑看你存放組件的位置,注冊后使用

頁面引入富文本組件.jpg

調(diào)用 ue組件里的方法滿足要求,無非就是獲取內(nèi)容和放入內(nèi)容(放入內(nèi)容編輯時回顯用的)

獲取富文本內(nèi)容.png

后臺處理富文本的請求(上傳和下載)

請求路勁==>>ueditor.config.js 下配置的serverUrl: '/uentor/uentorupload.do',

富文本請求后臺.jpg

引入后臺java代碼,這里分為兩個部分 config.json配置文件和部分java類
注意:配置文件名必須是config.json,并且文件夾名必須叫conf,源碼加載配置是這么定義的(當然如果去改源碼,當我沒說);

config.json配置文件的引入位置.jpg
java代碼引入包.jpg

以上是對百度富文本引入的簡單步驟

***項目中常見問題總結

1):富文本回顯的問題

如果向數(shù)據(jù)庫中添加帶有特殊的字符,回顯會有問題,比如加入html代碼,一般情況下項目工程會配置過濾器,使得一些支付被轉意,安全起見往后臺傳值以前用 base64 加密==>>Base64.encode(value),使用前解密==>>Base64.decode(value);

2):上傳圖片的問題

上傳主要就是配置問題,ueditor所有的請求都是一個 ueditor.config.js中的serverurl就是請求地址(統(tǒng)一請求地址),后臺接口一定保持一致,接口有固定寫法 代碼如下
@RequestMapping(value="/ueditor")
public class UploadController {
@RequestMapping(value="/ueditorupload.do")
public void upload(HttpServletRequest request, HttpServletResponse response) throws
UnsupportedEncodingException {
//編碼
request.setCharacterEncoding( "utf-8" );
//設置響應頭信息
response.setHeader("Content-Type" , "text/html");
//得到服務器路徑 webapp目錄
String rootPath = request.getSession().getServletContext().getRealPath("/");
try {
// ueditor自己的類和方法,剩下的自己去處理,
//兩個參數(shù):1.請求;2:roopath路徑用來加載config.json配置文件,config.json配置了上傳下載的信息;
String exec = new ActionEnter(request, rootPath).exec();
PrintWriter writer = response.getWriter();
writer.write(exec);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

配置不成功的話 會報 "后臺配置錯誤,上傳插件無法加載"

config.json里有對上傳的文件具體設置,注釋基本很詳細,這里就不寫了

有一個"沒有找到請求資源的錯誤",主要是 ueditor與springMvc的上傳解析器 CommonsMultipartResolver 沖突

注釋掉顯然不現(xiàn)實, 但是我們可以重寫 CommonsMultipartResolver的 isMultipart(); 代碼如下
import javax.servlet.http.HttpServletRequest;import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
public class CommonsMultipartResolerOverride extends CommonsMultipartResolver {
@Override
public boolean isMultipart(HttpServletRequest request) {
String url = request.getRequestURI();
//紅色的值要與請求接口的值相同,這是手動過濾,也就是如果是ueditor的請求就不走springmvc的上傳了
if(url!=null && url.contains("/ueditorupload.do")) {
return false;
}else {
return ServletFileUpload.isMultipartContent(request);
}
}
}

然后 將springMvc.xml里配置上傳解析器的地方的實體類換成 自己重寫的這個方法類

"沒有權限"錯誤,主要是上傳文件重名的問題 隨機生成文件名即可(config.json里面有配置生成文件名的地方)

3):限制上傳圖片的最大顯示寬度 自適應編輯器窗口大小 百分比

ueditor.all.js 搜索
// 設置默認字體和字號
'body{margin:8px;font-family:sans-serif;font-size:16px;}' +

//設置圖片最大寬度,以免撐出滾動條
'img{max-width:90%;}'+ //這是加入的行*********

// 設置段落間距
'p{margin:5px 0;}</style>' +
設置 圖片的 最大回顯寬度 這里直接在 html 中添加 style 屬性
1):單圖片上傳
在 ueditor.all.js 搜索 loader.setAttribute('alt', data.original || '');

在這里添加 loader.setAttribute('style', 'max-width:90%');

2):多圖片上傳
在 ueditor.all.js 搜索 <img src
第三處 是拼接前端 html 的字符串

在 style后面 加上 max-width:90% ;也就是 ' style="max-width:90% ' +

4):上傳視頻 文檔里無法預覽的問題

問題1 ==>> 編輯器沒有開放視頻插入的代碼的白名單,所以會被過xss濾掉
解決: 首先在ueditor.config.js文件里增加xss過濾白名單,一般源文件中就有
在這里的末尾加上下列在插入視頻中使用的代碼:
收索: // xss過濾白名單

source: ['src', 'type'],
embed: ['type', 'class', 'pluginspage', 'src', 'width', 'height', 'align','style', 'wmode', 'play','autoplay','loop', 'menu', 'allowscriptaccess','allowfullscreen', 'controls', 'preload'],
iframe: ['src', 'class', 'height', 'width', 'max-width', 'max-height', 'align','frameborder', 'allowfullscreen']

另外由于插入的代碼不是視頻,那么首先要找到插入編輯器代碼的代碼,位置在ueditor.all.js里,
找到以下代碼:
修改前:html.push(creatInsertStr(vi.url, vi.width || 420, vi.height || 280, id + i, null, cl, 'image')

修改后:html.push(creatInsertStr(vi.url, vi.width || 420, vi.height || 280, id + i, null, cl, 'embed')將image改為嵌入視頻url的embed標簽;

//改完這里后會發(fā)現(xiàn)插入視頻地址后,雖然編輯器可以看到視頻了,但是插入視頻的窗口不能關閉了
之所以會出現(xiàn)這個問題是因為改成embed后,下面的代碼無法正常找到image標簽及其里面的屬性導致的,這里只要注釋以下內(nèi)容就可以解決插入視頻框無法自動關閉的問題。
在ueditor.all.js收索: me.addListener('delkeyup',function(){
注釋掉此方法
接著往下看,除開這個bug外,還有新的問題,下面我們來看看點擊切換源碼再回到編輯器預覽里會發(fā)生什么。
去源碼里已經(jīng)視頻代碼不會被過濾了,但是回到編輯器卻是一片空白
問題出在源碼段代碼里:type="application/x-shockwave-flash" class="edui-faked-video"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type規(guī)定了flash格式,我插入的是flash所以沒問題,pluginspage是提供用戶flash下載地址的(有些用戶沒有安裝
flash插件或者沒有及時更新),那么問題是在class里了,因為ediu-faked-video會告訴編輯器這不是一個視頻,
因此會刪除embed里的src的鏈接,因此回到編輯器預覽會出現(xiàn)白板。
接著改
下面是判斷如果點擊視頻上傳需要導入的是embed代碼的情況,之前是image,我們改成了embed,因此這里switch得到的
是embed的代碼模板,在這里我們?nèi)サ粢韵麓a:
type="application/x-shockwave-flash" class="' + classname + '"
pluginspage="http://www.macromedia.com/go/getflashplayer"' +'
修改前:
case 'embed':
str = '<embed type="application/x-shockwave-flash" class="' + classname +
'"pluginspage="http://www.macromedia.com/go/getflashplayer"' +
'"src="' + utils.html(url) + '" width="' + width + '" height="' + height +
'"' + (align ? ' style="float:' + align + '"' : '') +
' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >';

修改后:

case 'embed':
str = '<embed src="' + utils.html(url) + '" width="' + width + '" height="' + height + '"'
+ (align ? ' style="float:' + align + '"' : '') + ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >';
更改好后,刷新一下,我們再來看看插入視頻后進入源碼然后再回到編輯器預覽狀態(tài)下已經(jīng)沒有問題了,可以正常預覽
另外上傳視頻也可以正常運作
第二種方案:首先 把上面的修改成embed的地方 改成video, 然后修改ueditor.all.js 里面
case 'video' 處 也就是上面修改 case 'embed' 的下面 拼接html代碼處 video閉合標簽前面
隨便加上一些內(nèi)容 比如:'視屏' 這在渲染處是不顯示的;
以上解決了 拿不到視屏 html源碼的問題

5):自定義上傳路徑

關于自定義上傳文件路徑配置問題,在源碼中上傳的類是BinaryUploader.class,
String physicalPath = (String)conf.get("rootPath") + savePath; 就是上傳圖片最后的路徑。
其中rootPath是根路徑,savePath是自定義的圖片保存路徑(imagePathFormat對應的值),
在源碼中rootPath已被限制為讀取config.json的項目路勁,所以在這里需要改變?yōu)樽远x的路徑。
其中ConfigManager類中第146,147這里傳入的路徑字符串,只需將這改為
conf.put("savePath", savePath);
conf.put("rootPath", "自定義的根路徑");
這樣就OK了,
自定義上傳路徑,所有的上傳文件就不在工程目錄下了,回顯就不能正常回顯了,只能通過請求下載的方式
修改config.json配置文件中的 圖片訪問路徑前綴: "imageUrlPrefix": "/file/download.do?fileName=", /* 圖片訪問路徑前綴 */
通過拼接字符串發(fā)送下載請求,下載到頁面;

6):修改 超鏈接 a 標簽里的內(nèi)容

有時候默認內(nèi)容不能滿足我們的需求可能會對鏈接修改一些內(nèi)容,下面 就帶你去簡單修改一下 ueditor生成超鏈接的源碼
1、打開ueditor編輯器目錄“ueditor\dialogs\link”里的link.html文件;
2、找到以下3處代碼并編輯 參考鏈接
這里我們只是添加 a標簽里面的 內(nèi)容 所以直接修改 第三處位置 就Ok;
var obj = {
//原有的 a 標簽的屬性
'href' : href,
'target' : G('target').checked ? '_blank' : '_self', 'title' :G('title').value.replace(/^\s+|\s+$/g, ''),
//自己添加的屬性(我這里只是添加一個class供選擇添加樣式使用)
'class':"link-video"
'屬性名':"屬性值"
};

浪客行1213的簡書


xhh
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內(nèi)容