解决百度富文本编辑器Ueditor自定义上传视频封面
版權(quán)聲明:遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
原文出處鏈接:https://blog.csdn.net/m0_37826725/article/details/99094029
原文處作者留了一個(gè)不明顯的巨坑,所以再此處修改一下。原文處的"onclick" 不要復(fù)制
思路就是:選中上傳的視頻-點(diǎn)擊上傳封面-調(diào)用ueditor內(nèi)部的圖片上傳-更改保存的html內(nèi)容-更改顯示的背景圖
首先說(shuō)明是要更改源碼的!!!!
我是在ueditor.config.js里面沒(méi)有xss過(guò)濾白名單的情況下完成下面的操作的。這個(gè)東西可以不要,可以直接把whitList這個(gè)節(jié)點(diǎn)注釋掉。
全是在ueditor.all.js里面改的源碼
第一步:增加添加封面的按鈕
搜索popup.formatHtml(str)代碼把str賦值的內(nèi)容替換成下面內(nèi)容
var coverButton = ""; if (dialogName == "insertvideoDialog") {coverButton = " " +'<span onclick=$$._onImgCoverEditButtonClick(\'' +dialogName +'\') class="edui-clickable"><input id="coverImgUrl" style="display:none;" type="file" />添加封面' +"</span>"; } str = '<nobr>' + editor.getLang("property") + ': '+'<span onclick=$$._onImgSetFloat("none") class="edui-clickable">' + editor.getLang("default") + '</span> ' +'<span onclick=$$._onImgSetFloat("left") class="edui-clickable">' + editor.getLang("justifyleft") + '</span> ' +'<span onclick=$$._onImgSetFloat("right") class="edui-clickable">' + editor.getLang("justifyright") + '</span> ' +'<span onclick=$$._onImgSetFloat("center") class="edui-clickable">' + editor.getLang("justifycenter") + '</span> '+'<span onclick="$$._onImgEditButtonClick(\'' + dialogName + '\');" class="edui-clickable">' + editor.getLang("modify") + '</span>'+coverButton + '</nobr>';這樣寫是因?yàn)橹皇且曨l會(huì)顯示添加封面的按鈕。
第二步,添加按鈕的點(diǎn)擊事件,搜索var popup = new baidu.editor.ui.Popup({
在下面方法中增加一個(gè)方法_onImgCoverEditButtonClick,就是上面增加添加封面按鈕的點(diǎn)擊事件的方法。
我會(huì)把baidu.editor.ui.Popup這個(gè)里面的內(nèi)容全部貼出來(lái)可以全部替換。
var popup = new baidu.editor.ui.Popup({editor: editor,content: "",className: "edui-bubble",_onEditButtonClick: function() {this.hide();editor.ui._dialogs.linkDialog.open();},_onImgEditButtonClick: function(name) {this.hide();editor.ui._dialogs[name] && editor.ui._dialogs[name].open();},_onImgCoverEditButtonClick: function (name) {//this.hide();imgsCover = editor.ui._dialogs[name];editor.ready(function () {editor.addListener("beforeInsertImage", _coverInsertImage);});var urlcover = editor.getDialog("insertimage");urlcover.title = '視頻封面';urlcover.render();urlcover.open();},_onImgSetFloat: function(value) {this.hide();editor.execCommand("imagefloat", value);},_setIframeAlign: function(value) {var frame = popup.anchorEl;var newFrame = frame.cloneNode(true);switch (value) {case -2:newFrame.setAttribute("align", "");break;case -1:newFrame.setAttribute("align", "left");break;case 1:newFrame.setAttribute("align", "right");break;}frame.parentNode.insertBefore(newFrame, frame);domUtils.remove(frame);popup.anchorEl = newFrame;popup.showAnchor(popup.anchorEl);},_updateIframe: function() {var frame = editor._iframe = popup.anchorEl;if (domUtils.hasClass(frame, "ueditor_baidumap")) {editor.selection.getRange().selectNode(frame).select();editor.ui._dialogs.mapDialog.open();popup.hide();} else {editor.ui._dialogs.insertframeDialog.open();popup.hide();}},_onRemoveButtonClick: function(cmdName) {editor.execCommand(cmdName);this.hide();},queryAutoHide: function(el) {if (el && el.ownerDocument == editor.document) {if (el.tagName.toLowerCase() == "img" || domUtils.findParentByTagName(el, "a", true)) {return el !== popup.anchorEl;}}return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this, el);}});在文件開頭(function() {下面聲明變量存放數(shù)據(jù)用
var imgCover = {}; var imgsCover = {}, posteres;在if (editor.options.imagePopup)這個(gè)if語(yǔ)句下面增加一個(gè)處理上傳視頻封面的方法
// 視頻封面上傳動(dòng)作 function _coverInsertImage(t, result) {var imageHtml = '';for (var i in result) {posteres = imageHtml = result[i].src;}var img = imgsCover.editor.selection.getRange().getClosedNode(), url;url = img.getAttribute("_url");var align;utils.each(imgCover.getNodesByTagName("embed video"),function (node) {align = node.getStyle("float") || "";});editor.execCommand('insertvideo', {url: url + "+" + imageHtml,width: img.width,height: img.height,align: align}, 'upload'); }修改creatInsertStr 我貼出這個(gè)方法的代碼
/*** 創(chuàng)建插入視頻字符竄* @param url 視頻地址* @param width 視頻寬度* @param height 視頻高度* @param align 視頻對(duì)齊* @param toEmbed 是否以flash代替顯示* @param addParagraph 是否需要添加P 標(biāo)簽*/ function creatInsertStr(url, width, height, id, align, classname, type, poster) {var str;switch (type) {case "image":str = "<img " +(id ? 'id="' + id + '"' : "") +' width="' +width +'" height="' +height +'" _url="' +url +'" class="' +classname.replace(/\bvideo-js\b/, "") +'"' +' src="' +poster +'" style="background:url(' +poster +") no-repeat center center; border:1px solid gray;" +(align ? "float:" + align + ";" : "") +'" />';break;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" >';break;case "video":var ext = url.substr(url.lastIndexOf(".") + 1);if (ext == "ogv") ext = "ogg";str = "<video" +(id ? ' id="' + id + '"' : "") +' class="' +classname +' video-js" ' +(align ? ' style="float:' + align + '"' : "") +' controls poster="' +poster +'" preload="none" width="' +width +'" height="' +height +'" src="' +url +'" data-setup="{}">' +'<source src="' +url +'" type="video/' +ext +'" /></video>';break;}return str; }修改switchImgAndVideo 我貼出這個(gè)方法的代碼
function switchImgAndVideo(root, img2video) {imgCover = root;utils.each(root.getNodesByTagName(img2video ? "img" : "embed video"),function (node) {var className = node.getAttr("class");var _urles = node.getAttr("_url");posteres = node.attrs.poster;if (typeof (node.getAttr("_url")) != "undefined") {if (node.getAttr("_url").indexOf("+") != -1) {var _urlsposters = node.getAttr("_url").split("+");_urles = _urlsposters[0];posteres = _urlsposters[1];}}if (img2video) {posteres = node.getAttr("src");}if (className && className.indexOf("edui-faked-video") != -1) {var html = creatInsertStr(img2video ? node.getAttr("_url") : node.getAttr("src"),node.getAttr("width"),node.getAttr("height"),null,node.getStyle("float") || "",className,img2video ? "embed" : "image");node.parentNode.replaceChild(UE.uNode.createElement(html), node);}if (className && className.indexOf("edui-upload-video") != -1) {var html = creatInsertStr(img2video ? _urles : node.getAttr("src"),node.getAttr("width"),node.getAttr("height"),null,node.getStyle("float") || "",className,img2video ? "video" : "image", posteres);node.parentNode.replaceChild(UE.uNode.createElement(html), node);}}); }最后在搜索這個(gè)me.commands[“insertvideo”] = {下面for循環(huán)里面這一句替換一下
html.push(creatInsertStr(vi.url, vi.width || 420, vi.height || 280, id + i, null, cl, "image", posteres));總結(jié)
以上是生活随笔為你收集整理的解决百度富文本编辑器Ueditor自定义上传视频封面的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Firefox浏览器如何安装Alexa工
- 下一篇: 前端web开发培训,HTML表格标签,先