這次基于在編輯器中選擇素材庫(kù)素材的需求來(lái)對(duì)百度編輯器進(jìn)行了二次開(kāi)發(fā)
1.關(guān)于百度編輯器的二次開(kāi)發(fā),一般多為添加按鈕、彈窗或者下拉框。若我們需要為編輯器添加這些功能,需要給編輯器中新引入JS文件。對(duì)于在媒立方系統(tǒng)中,我們可以在ueditor指令中添加(這樣的話各渠道的編輯器都會(huì)存在添加的功能),也可以在lazyLoad中引入自定義的JS文件(這樣的話只有在引入這個(gè)JS的編輯器中存在添加的功能)。
2.二次開(kāi)發(fā)JS文件編寫(xiě),自定義彈窗:
使用UE.ui.Dialog方法進(jìn)行注冊(cè);
自定義按鈕:
使用UE.ui.Button方法進(jìn)行注冊(cè),與注冊(cè)彈窗區(qū)別的是按鈕需要返回
無(wú)論是注冊(cè)新的彈窗還是按鈕或者是下拉框,都需要基于UE.registerUI方法,這個(gè)方法在百度編輯器的文檔中有詳細(xì)的介紹。
3.自定義彈窗的使用angular
編輯器的自定義彈窗是一個(gè)iframe,在這個(gè)iframe中我們可以使用任何框架,本次開(kāi)發(fā)中由于需要在彈窗中展現(xiàn)素材庫(kù)的內(nèi)容、分類還要使用分頁(yè),所以在彈窗中我又構(gòu)建了一個(gè)angular環(huán)境:
需要注意的是這里的angular環(huán)境是獨(dú)立的,擁有自己的ng-app(angular邊界),所以我們以前封裝的指令或者服務(wù)在這里都不能使用,需要使用的話必須將原來(lái)的代碼注冊(cè)在該環(huán)境的主模塊中,例如:
4.彈窗后的回調(diào)與數(shù)據(jù)傳輸
這里的彈窗沒(méi)有$moadl那樣方便,我們需要將彈窗中選擇的素材插入到編輯中,那么如何拿到彈窗中的數(shù)據(jù)就是核心問(wèn)題。目前有兩種方式可以拿到數(shù)據(jù),一種就是使用瀏覽器的本地緩存,另一種是使用編輯器的registerCommand方法:
如圖所示形參data、width和height就是從彈窗傳回的值,需要注意的是注冊(cè)的uiName:dialog_material是彈窗跟編輯器連接的橋梁,而且這個(gè)uiName不支持大寫(xiě)字母,dialogMaterial這樣的話就不會(huì)成功拿到數(shù)據(jù)(親測(cè)?。。。。。。。?/p>
5.編輯器插入素材
V根據(jù)百度編輯器的api文檔,插入視頻需要調(diào)用insertvideo方法,但是調(diào)用這個(gè)方法后視頻無(wú)法播放。出現(xiàn)這個(gè)原因是因?yàn)檎{(diào)用這個(gè)方法后會(huì)生成<embed>標(biāo)簽,這個(gè)標(biāo)簽在編輯器中無(wú)法播放,解決方法是使用:
\
insertHtml方法通過(guò)插入iframe標(biāo)簽播放視頻,插入第三方視頻地址也是通過(guò)生成iframe標(biāo)簽進(jìn)行播放。這里還有一個(gè)需要注意的地方,使用iframe而不是video標(biāo)簽的原因是,目前版本的百度編輯器對(duì)H5標(biāo)簽的解析還不夠好,在編輯器中插入video標(biāo)簽,使用ue.getContent()方法得不到video標(biāo)簽,
所以使用iframe進(jìn)行播放。
插入圖片同理使用insertHtml方法