vue3 集成kindeditor研究

news2024/11/27 22:20:47

        kindeditor虽然老,但是稳定,最大的好外是word贴进去不变形,后端部分有安全隐患,我给去掉了,只保留了前端,集成jquery添加了跨域ajax上传功能。

        用iframe引用实属无奈,因为尝试了好多次用ts封装都没有成功,网络上的插件在vue3+vite+ts环境下都不能正常工作,所以拐了这么个弯,以后研究好了再发资源。

        资源下载链接:https://download.csdn.net/download/dugucike/87823978。

效果图:

研究内容如下:

下载:

关于 - KindEditor - 在线HTML编辑器

安装:

去官网下载后放工程文件夹下,/public/kindeditor

编辑器主页:

/public/kindeditor.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

    <textarea id="editor_id" name="content" style="width:100%;height:300px;">

        &lt;strong&gt;HTML内容&lt;/strong&gt;

        </textarea>

</body>

</html>

//引用jQuery

<script charset="utf-8" src="/kindeditor/lib/jquery-3.6.4.min.js"></script>

<script charset="utf-8" src="/kindeditor/kindeditor-all.js"></script>

<script charset="utf-8" src="/kindeditor/lang/zh-CN.js"></script>

<script>

    KindEditor.ready(function (K) {

        window.editor = K.create('#editor_id', {

//域名

            domainJson: 'http://localhost:5169',

//后端上传接口

            uploadJson: 'http://localhost:5169/api/V1/FileOperator/UploadSingleFile',

//大文件上传接口

            bigFileUploadJson: 'http://localhost:5169/api/V1/BigFileUploader/FileUploader',

        }

        );

    });

//取编辑器

    function getEditor() {

        return window.editor;

    }

</script>

引用:

<template>

  <iframe ref="refEditorFrame" width="100%" height="600" src="/kindeditor.html" frameborder="0"></iframe>

</template>

*.vue取值赋值:

/components/KindEditorTest.vue

<template>

  <button @click="showIframeDoc">取内容</button>

  <button @click="setIframeDoc">设置内容</button>

  <iframe ref="refEditorFrame" width="100%" height="600" src="/kindeditor.html" frameborder="0"></iframe>

  <div id="bodyContainer" ref="contentShower" style="display: none;"></div>

</template>

<script setup lang="ts">

import { ref } from "vue";

const refEditorFrame = ref()

const contentShower = ref<HTMLElement>();

//引用编辑器

function getEditor() {

  return refEditorFrame.value.contentWindow.getEditor();

}

//取编辑器内容

const showIframeDoc = () => {

  let editor = getEditor();

  console.info("refEditorFrame:", editor.html());

}

//设置编辑器内容

const setIframeDoc = () => {

  let editor = getEditor();

  editor.html("<b>内容设置</b>");

}

</script>

经验总结:

1,编辑器添加标签白名单:否则在切换源码模式和设计模式时会被清理掉

video: ['src', 'type', 'width', 'height', 'autostart', 'loop', 'controls', 'preload', 'muted'],

2,修改图标及样式:

图标文件:\public\kindeditor\themes\default\default.png,在这个图片上加图标,大小16*16

样式文件:\public\kindeditor\themes\default\default.css

.ke-icon-wpsword {

    background-position: 0px -1248px;

    width: 16px;

    height: 16px;

}

*wpsword部分需要和命令同名

3,新增插件:

*3.1。可以在kindeditor-all.js 里面KE.plugin开头的部分的工一个类似的界面,复制并改名,然后从里面,改内容,比较快,这样就制作了一个插件,比较叫hello,全部为小写字母组合*

例如:

KE.plugin['hello'] = {

    click : function(id) {

        alert("您好");

    }

};

3.2,定义鼠标经过按钮文字

KE.lang['hello'] = "您好";

3.3,定义样式,样式定义如上面的default.css,按照官网给的样例不能正常显示。

3.4,添加按钮:

KE.show({

    id : 'content1',

    items : ['hello']

});

5,集成jQuery.js:

5.1将jQuery.js放到/public/kindeditor/lib目录下

5.2在/public/kindeditor.html里面引用

<script charset="utf-8" src="/kindeditor/lib/jquery-3.6.4.min.js"></script>

5.3 jquery文件上传样例:

uploadbutton.fileBox.change(function (e) {

            dialog.showLoading(self.lang('ajaxLoading'));

            //调用ajax上传

            var fd = new FormData()

            fd.append('avatar', e.target.files[0])

            $.ajax({

                method: 'POST',

                url: uploadJson,

                data: fd,

                crossDomain: true,

                processData: false,

                contentType: false,

                success: function (res) {

                    urlBox.val(domainJson + res.messageInfoExt);

                    titleBox.val(e.target.files[0].name);

                    dialog.hideLoading();

                },

                error: function () {

                    dialog.hideLoading();

                }

            });

        });

6,关于编辑器的一点儿小研究:

1,启动和关闭loading

dialog.showLoading(self.lang('ajaxLoading'));

dialog.hideLoading();

2,执行命令后关闭窗口:

self.exec('insertimage', url, title, width, height, 0, align).hideDialog().focus();

3,self指编辑器

4, K.undef(self.formatUploadUrl, true),  取初始化时配置变量formatUploadUrl值

5,弹出自定义内容:

        alert(self.lang('pleaseSelectFile'));

6,取控件:

var urlBox = K('[name="url"]', div), //文件路径文本框

     titleBox = K('[name="title"]', div); //文件标题文本框

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在华为OD机试中获得满分?Java实现【快速开租建站】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 当前IT部门支撑了子公司…

【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码

1 题目 B题 人工智能对大学生学习影响的评价 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo 4:1战胜韩国围棋高手李世石&#xff0c;期后波士顿动力公司的人形机器人Atlas也展示了…

【PICO G2 4K】 + 【Unity2020.3.40】 :Android 发布设置

一、【设备】设置 设备开始USB调试模式&#xff0c;然后用usb线连接到电脑&#xff0c;识别后下拉框会显示该设备 二、【脚本调试】的Debug设置 如果要在PICO上读取脚本的Debug信息&#xff0c;则需要开启下图中选项&#xff0c;并配置adb工具读取log日志。 参考之前的blog…

学了两个多月软件测试,顺利过了试用期,拿到12K的我很满足了

先介绍一下&#xff0c;我是机械专业的&#xff0c;在一个大厂做售后工程师&#xff08;就是修东西的&#xff09;&#xff0c;做了几年没啥成绩&#xff0c;年龄越大&#xff0c;心里压力也越大&#xff0c;而且这种大型设备维修很容易出事故&#xff0c;就想着搞一门好点的技…

软件测试面试题【内附超详细面试宝典】

一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最后一个技术面试是企业了解你“行不行”的关键环节&#xff0c;每个企业都会有的。 在平时的学习、工作中一定要善…

《Zookeeper》从零开始学Zookeeper源码(一)之源码环境搭建

目录 源码环境搭建1. 下载源码2. 编译3. Eclipse启动服务端4. 启动客户端 源码环境搭建 1. 下载源码 下载地址&#xff1a; github 2. 编译 进入下载好的源码的根目录&#xff0c;因为下载依赖的时候需要apache的maven元数据&#xff0c;目前最高的版本为3.8.0-SNAPSHOT&am…

【分享】科大讯飞星火认知大模型(初体验)

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门话题。在众多NLP模型中&#xff0c;科大讯飞星火认知大模型成为了一个备受瞩目的新秀&#xff0c;今天我们来了解…

C++中string::npos 的使用

string::npos 的作用 string::npos 的意思:The constant is the largest representable value of type size_type. It is assuredly larger than max_size(); hence it serves as either a very large value or as a special code. 大致意思 是一个常量, 是size_type类型,是一…

策略模式-类型统计

文章目录 前言一、策略模式是什么&#xff1f;二、策略模式应用场景三、策略模式优点四、策略模式缺点五、场景案例&#xff1a;类型统计1.项目结构2.UML图解3.代码实现3.1 指标枚举3.2 请求体3.3 响应体3.4.分析统计指标策略3.5.接口3.6.扩展接口3.7.接口实现3.8.控制层 六、P…

2023年本科应届生,金融转行做数据分析有前景吗?

当然有前景的&#xff0c;尤其是数据分析本身的发展前景是无限的&#xff1b;而作为个人而言&#xff0c;只要你专业技能掌握得好&#xff0c;对于业务的理解分析能力过关&#xff0c;也是非常有发展前景的&#xff0c;尤其是在数据分析人才紧缺的阶段&#xff0c;众多行业领域…

直播预告:聚焦盗号 企业邮件安全的威胁分析与应对

根据Coremail邮件安全人工实验室数据监测&#xff0c;2023年Q1全国企业级用户遭受超过17.45亿次暴力破解&#xff0c;虽然无差别的暴力破解攻击从去年Q4开始有相当幅度的下降趋势&#xff0c;但在今年2-3月&#xff0c;全域暴力破解攻击次数又开始回升。 根据Coremail邮件安全专…

Go 存储系列:Hash存储引擎 Bitcask

Hash 存储引擎 在现代软件系统中&#xff0c;存储和检索数据是一个非常重要的任务。随着数据量的不断增长&#xff0c;如何高效地存储和检索数据变得越来越重要。Hash 存储引擎是一种常见的存储引擎&#xff0c;它可以快速地存储和检索数据。 在本文中&#xff0c;我们将介绍…

深入篇【C++】类与对象:友元函数与友元类

深入篇【C】类与对象&#xff1a;友元函数与友元类 ①.提出问题&#xff1a;重载operator<<②.解决问题&#xff1a;友元Ⅰ.友元函数【特点】 Ⅱ.友元类【特点】 ③.总结问题 ①.提出问题&#xff1a;重载operator<< 如果我们尝试去重载运算符operator<<,你…

【JavaSE】Java基础语法(十八):接口

文章目录 1. 接口的概述2. 接口的特点3. 接口的成员特点4. 类和接口的关系5. 抽象类和接口的关系 1. 接口的概述 接口就是一种公共的规范标准&#xff0c;只要符合规范标准&#xff0c;大家都可以通用。Java中接口存在的两个意义 用来定义规范用来做功能的拓展 2. 接口的特点…

SpringBoot3.0升级遇到关于Invalid bound statement (not found)处理方案

前言 今天升级SpringBoot3时尝试兼容Mybatis和MybatisPlus出现多个异常。顺带写写排查方案&#xff0c;springboot2其实也一样用 排查方向&#xff1a;mapper接口中的方法名和mapper.xml中的id标签不一致 仔细核对抛出异常的接口和xml文件名。方法名排查方向&#xff1a;.map…

基于docker容器化的jenkins2.406升级迁移(jdk8升级jdk11)

查看基础配置 查看jenkins的home路径: 查看磁盘占比: 发现占比比较大的是: 主要子目录&#xff1a; jobs&#xff1a;包含Jenkins管理的构建作业的配置细节、构建产物和数据&#xff1b;logs&#xff1a;Jenkins的日志目录&#xff1b;plugins&#xff1a;包含所有已经安装了…

低代码开发平台助力门店管理创新,提升用户体验

随着信息技术的飞速发展&#xff0c;低代码开发成为了近年来热门的开发方式。同时&#xff0c;在零售业中&#xff0c;门店管理也成为了一个重要的议题。本文将结合低代码开发和门店管理两个主题&#xff0c;探讨如何应用低代码技术优化门店管理。 一、门店管理的挑战 门店管…

Ansible从入门到精通【二】

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 专栏名称&#xff1a;Ansible从入门到精通 立志成为ansible大佬 文章目录 ansible常用命令ansibleansible-d…

Revit幕墙:用幕墙巧做屋面瓦及如何快速幕墙?

一、Revit中用幕墙巧做屋面瓦 屋面瓦重复性很高&#xff0c;我们如何快速的创建呢?下面我们来学会快速用幕墙来创建屋面瓦的技巧。 1.新建“公制轮廓-竖挺”族&#xff0c;以此来创建瓦的族(以便于载入项目中使用) 2.在轮廓族中绘制瓦的轮廓(轮廓需要闭合)&#xff0c;将族名称…

淘宝天猫618预售活动时间是从几号什么时候开始2023天猫淘宝618预售定金能退吗?

2023年淘宝天猫618预售什么时候开始&#xff1f; 2023年5月26日20:00淘宝天猫618预售活动开始截至到5月31日18:00结束&#xff1b; 2023年淘宝天猫618预售定金支付后可退吗&#xff1f; 淘宝天猫618预售定金支付后如不想要该预售商品了&#xff0c;可以在5月31日20:00后完成尾…