首页 > 其他分享 >【前端】vue引入tinymce富文本编辑器上传视频自动转img问题

【前端】vue引入tinymce富文本编辑器上传视频自动转img问题

时间:2024-11-26 16:14:36浏览次数:6  
标签:node 文本编辑 vue attr img videoSource previewWrapper var name

近期遇到了一个问题,前端项目引入tinymce富文本编辑器后有一个上传视频的需求,可是放入了视频以后,在预览时发现,视频标签未能正确展示,被替换为了img标签

找了很多解决办法,都没有解决这个问题,最后找到了一个办法, 特此记录。
解决办法:

1. 找到node_modules下tinymce插件里面的media文件下的plugin.js(node_modules/tinymce/media/plugin.js) 这个文件
2. 添加全局变量

var videoSource="";

3. 找到 createPreviewIframeNode 方法将方法代码替换为以下代码(可以将原来代码注释掉,方便恢复)

var createPreviewIframeNode = function (editor, node) {
  var previewWrapper;
  var previewNode;
  var shimNode;
  var name = node.name;
  previewWrapper = new global$7('span', 1);
  previewWrapper.attr({
	'contentEditable': 'false',
	'style': node.attr('style'),
	'data-mce-object': name,
	'class': 'mce-preview-object mce-object-' + name
  });
  retainAttributesAndInnerHtml(editor, node, previewWrapper);
  previewNode = new global$7(name, 1);
  previewNode.attr({
	src: videoSource || node.attr('src'), // 修改
	controls: 'controls',    // 新增
	allowfullscreen: node.attr('allowfullscreen'),
	style: node.attr('style'),
	class: node.attr('class'),
	width: node.attr('width'),
	height: node.attr('height'),
	frameborder: '0'
  });
  shimNode = new global$7('span', 1);
  shimNode.attr('class', 'mce-shim');
  previewWrapper.append(previewNode);
  previewWrapper.append(shimNode);
  return previewWrapper;
};

4. 找到这个方法 placeHolderConverter ,然后在这个方法中找到以下代码块然后注释

 if (node.name === 'iframe' && hasLiveEmbeds(editor) && global$8.ceFalse) {
     if (!isWithinEmbedWrapper(node)) {
       node.replace(createPreviewIframeNode(editor, node));
     }
   } else {
     if (!isWithinEmbedWrapper(node)) {
       node.replace(createPlaceholderNode(editor, node));
     }
   }

5. 注释掉以上代码后替换为如下代码:

if (node.name === 'video' && hasLiveEmbeds(editor) && global$8.ceFalse) {
	console.log('videoSource===', videoSource)
	videoSource = ''
	if(node.attributes['map'] && node.attributes['map'].src){
	  videoSource = node.attributes['map'].src
	}else{
	  for(var ii=0;ii<node.attributes.length;ii++){
		if(node.attributes[ii].name == "src"){
		  videoSource = node.map.node.attributes[ii].value
		}
	  }
	}
	if(node.firstChild && node.firstChild.value){
	  var elel=node.firstChild && node.firstChild.value
	  var objE = document.createElement("div");
	   objE.innerHTML = elel;
	  var dom = objE.getElementsByTagName('source')[0]
	  videoSource = dom.getAttribute('src')
	}
	node.replace(createPreviewIframeNode(editor, node));
}

好了,以上就是解决办法,最后效果如下:

标签:node,文本编辑,vue,attr,img,videoSource,previewWrapper,var,name
From: https://www.cnblogs.com/sansui6/p/18570387

相关文章

  • AntDesign - Vue Table组件 实现动态表格、表头分组的功能(方式一)
     一、功能分析产品经理要求企微主体名称是配置项且后期可修改或增加,各企微主体账号的数据一对应。前端开发设计方案为:静态列(左部分)在前端写,配置项由后端接口返回,再动态追加到columns中,根据表头dataIndex对应的数据项,填充到数据数组dataSource。至此,开发思路出来......
  • Electron系列 -- vue项目打包成.exe文件(通过官方demo的方式)
    一.拉取官方demo(electron-quick-start)//将electron官网中的 electron-quick-start 拉取到本地 git clone https://github.com/electron/electron-quick-start  安装成功的目录如下  2.安装好后,用vscode(SublimeTex等工具)打开,新建终端,输入下面的命令。初始......
  • 基于SpringBoot+Vue的零食销售网站平台设计与实现
    文章目录1.前言2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.前言......
  • 基于SpringBoot+Vue的毕业生招聘管理系统设计与实现
    文章目录1.前言2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.前言......
  • 基于SpringBoot+Vue的教师人事档案管理系统设计与实现
    文章目录1.前言2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.前言......
  • java电子学习笔记交易系统vue+springboot
    目录课题介绍具体实现截图课程项目技术路线代码流程执行分析thinkphp框架解析开发技术介绍PHP核心代码部分展示详细视频演示源码获取课题介绍功能需求:(可能想的不是很全面,参考校园二手就可以了)登录页面:可以注册、登录,用户名密码(密码有格式检验)主页:头、搜索功能、播......
  • 看不懂来打我,Vue3的watch是如何实现监听的?KN
    合集-vue3源码(5)1.Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手08-262.Vue3.5中解构props,让父子组件通信更加丝滑09-183.让性能提升56%的Vue3.5响应式重构之“版本计数”11-064.揭秘!Vue3.5响应式重构如何让内存占用减少56%11-135.看不懂来打我,Vue3的watch是如何实现监听......
  • vue中sse响应处理(流式数据处理)
    使用fetch请求exportfunctionpostStream(data){ returnfetch('url-请求地址',{ method:'post', body:JSON.stringfy(data), responseType:'srteam', headers:{ 'Content-Type':'application/json' } })......
  • 基于SpringBoot+Vue的休闲娱乐代理售票系统
    源码获取:https://download.csdn.net/download/u011832806/89455016基于SpringBoot+Vue的休闲娱乐代理售票系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven系统演示视频:链接:https://pan.baidu.com/s/1sab9kLn-Ts1A-9DaQQa-x......
  • SpringBoot3+Vue3+NaiveUI | 小蚂蚁云
    项目介绍基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、NaiveUI、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、TypeScript、Vite等技术栈实现,采......