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