vue2使用tinymce self-hosted,手动引入werpaste插件后,编辑器能正常运行,但粘贴Microsoft word时老是提示安装flush插件:
浏览器安装了flush插件后依然弹窗
项目结构:
封装的tinymce组件,Tinymce.vue:
<!-- tinymc富文本 -->
<template>
<div>
<editor
v-model="myValue"
:init="init"
:disabled="disabled"
@onClick="onClick"
>
</editor>
</div>
</template>
<script>
import tinymce from "tinymce/tinymce";
import Editor from "@tinymce/tinymce-vue";
import "tinymce/skins/ui/oxide/skin.css";
import "@/assets/tinymce/zh_CN.js"; // 本地汉化
import "tinymce/themes/silver/theme";
import "tinymce/plugins/image";
import 'tinymce/plugins/media'
import 'tinymce/plugins/table'
import "tinymce/plugins/lists";
import "tinymce/plugins/contextmenu";
import "tinymce/plugins/wordcount";
import "tinymce/plugins/colorpicker";
import "tinymce/plugins/textcolor";
import "tinymce/icons/default"; // 图标 -解决测试环境找不icon问题
import "tinymce/plugins/autoresize";
import 'tinymce/plugins/paste'
export default {
name: "tinymce",
components: {
Editor,
},
props: {
//传入一个value,使组件支持v-model绑定
value: {
type: String,
default: "",
},
disabled: {
type: Boolean,
default: false,
},
plugins: {
type: [String, Array],
default:
'lists code pagebreak charmap emoticons save preview print image media link powerpaste ' +
'anchor codesample table wordcount fullscreen help searchreplace hr insertdatetime autoresize',
},
toolbar: {
type: [String, Array],
default:
// 'undo redo | searchreplace | bold italic | underline | strikethrough | alignleft aligncenter alignright | outdent indent blockquote removeformat subscript superscript code codesample hr bullist numlist link image charmap preview anchor pagebreak insertdatetime table forecolor backcolor'
"undo redo | formatselect | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat hr",
},
},
data() {
return {
//初始化配置
init: {
language_url: "@/asset/tinymce/langs/zh_CN.js", // 这里需要单独处理
language: "zh_CN",
height: 500,
width:"100%",
plugins: this.plugins,
// 添加扩展插件
external_plugins: {
powerpaste: '../../assets/tinymce/powerpaste/plugin.min.js',
},
paste_merge_formats: false,
powerpaste_word_import: 'propmt', // 参数可以是propmt, merge, clear,效果自行切换对比
powerpaste_html_import: 'propmt',
powerpaste_allow_local_images: true,
toolbar: this.toolbar,
branding: true,
menubar: true,
// 上传方式1:填写images_upload_url和images_upload_base_path
images_upload_url: '/upload', // 图片上传地址
images_upload_base_path: '/some/basepath',
//此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
//如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
// 上传方式2(建议这种):自定义上传逻辑
images_upload_handler: (blobInfo, success, failure) => {
const img = "data:image/jpeg;base64," + blobInfo.base64();
success(img);
},
resize: true,
},
myValue: this.value,
};
},
mounted() {
tinymce.init({});
},
methods: {
//添加相关的事件,可用的事件参照文档=> https://github.com/tinymce/tinymce-vue => All available events
//需要什么事件可以自己增加
onClick(e) {
this.$emit("onClick", e, tinymce);
},
clear() {
this.myValue = "";
},
},
watch: {
value(newValue) {
this.myValue = newValue;
},
myValue(newValue) {
this.$emit("input", newValue);
},
},
};
</script>
<style scoped></style>
这是调用时的代码: