百度編輯器目前來講是運用比較廣泛的一個編輯器了,不僅開源還有中文的文檔,所以很受歡迎,不過里面也有許多地方需要開發人員自己調試,其中一個比較常見的問題就是上傳視頻了,上傳視頻本身有一些小bug,這個基本最大的體現就是編輯器內無法預覽上傳的視頻問題。
我搜集了網上的解決方案,發現基本都一樣,大多數都是復制黏貼的答案,雖說一定程度解決了編輯器上傳不顯示的問題,但卻造成了新的bug,例如上傳視頻框無法關閉,還有只要等切換源碼模式再返回來又看不到預覽的視頻了等。
所以最后還是自己動手豐衣足食,最后終於找到了完美解決方案,在找問題的過程也發現其實百度編輯器雖然留下了bug,但這些bug完全是在預期內的,也就是給了你解決的途徑,只需要能理解他們的代碼根據他們的思路來就可以改成你想要的樣子,關鍵還是理解他們的開發思路,想必這對專業的前端肯定是很簡單的,奈何我並不是專業的前端,所以還是花了點時間,下面來看解決方案和bug本身的問題。
先來看具體的bug情況:
在插入視頻里放入地址后,正常顯示在插入視頻里,這個時候是正常的
但插入后會顯示下圖,視頻沒有正常的預覽,這是因為設置插入編輯器里的不是視頻的代碼,而是image圖片的代碼
這個時候如果進入源碼看的話,會發現里面是空的,根本什么都沒有
在進入編輯器的預覽會發現之前的圖片都消失了
出現這種情況是由於編輯器沒有開放視頻插入的代碼的白名單,所以會被過xss濾掉
解決方案:
首先在ueditor.config.js文件里增加xss過濾白名單:
在這里的末尾加上下列在插入視頻中使用的代碼:
另外由於插入的代碼不是視頻,那么首先要找到插入編輯器代碼的代碼,位置在ueditor.all.js里,如果引用的是uedior.min.js就需要在這里找,找到以下代碼:
改完這里后會發現插入視頻地址后,雖然編輯器可以看到視頻了,但是插入視頻的窗口不能關閉了
之所以會出現這個問題是因為改動embed后,下面紅框的代碼無法正常找到image標簽及其里面的屬性導致的,這里只要注釋紅框的內容就可以解決插入視頻框無法自動關閉的問題。
接着往下看,除開這個bug外,還有新的問題,下面我們來看看點擊源碼再回到編輯器預覽里會發生什么。
從上面的圖上可以看出,去源碼里已經視頻代碼不會被過濾了,但是回到編輯器卻是一片空白,這是怎么回事呢?
問題出在紅框里的這段代碼里:type="application/x-shockwave-flash" class="edui-faked-video" pluginspage="http://www.macromedia.com/go/getflashplayer"
type規定了flash格式,我插入的是flash所以沒問題,pluginspage是提供用戶flash下載地址的(有些用戶沒有安裝flash插件或者沒有及時更新),那么問題是在class里了,因為ediu-faked-video會告訴編輯器這不是一個視頻,因此會刪除embed里的src的鏈接,因此回到編輯器預覽會出現白板。
網上其他的答案是把ediu-faked-video改成ediu-video,但我不建議,因為只能解決部分問題而已,還有其他的bug,例如如果上傳的視頻是mp4格式怎么辦,另外改動的地方不止樣一處,還是有問題,因此我建議改動ueditor.all.js里的下圖紅框部分:
這里是判斷如果點擊視頻上傳需要導入的是embed代碼的情況,之前是image,我們改成了embed,因此這里switch得到的是embed的代碼模板,在這里我們去掉
- type="application/x-shockwave-flash" class="' + classname + '" pluginspage="http://www.macromedia.com/go/getflashplayer"' +'

更改好后,刷新一下,我們再來看看插入視頻后進入源碼然后再回到編輯器預覽狀態下已經沒有問題了,可以正常預覽,紅框里的代碼的src內容已經不會被過濾了:
另外上傳視頻也可以正常運作,如果是按照網上改edui-faked那種,這里如果傳的是MP4等其他格式的就會出問題。