TinyMCE初始化后修改工具栏的正确方法

2024-01-04

我正在使用 JavaScript 扩展云托管的 LMS。因此,我们可以在页面中添加javascript,但不能针对不同的组件修改供应商的javascript。

LMS 经常使用tinyMCE。目标是在每个tinyMCE编辑器的工具栏上添加一个新按钮。

问题是,由于tinyMCE模块是在供应商不可触及的代码中初始化的,因此我们无法修改init()调用。因此,我们不能向 init() 对象的“toolbar”属性添加任何文本。

所以我用一种比较hacky的方式完成了这个:

tinyMCE.on('AddEditor', function(e){
  e.editor.on('init', function(){
    tinyMCE.ui.Factory.create({
      type: 'button',
      icon: 'icon'
    }).on('click', function(){
      // button pressing logic
    })
    .renderTo($(e.editor.editorContainer).find('.mce-container-body .mce-toolbar:last .mce-btn-group > div')[0])
  });
});

所以这是可行的,但不用说,我不太愿意在 DOM 中寻找这样一个特定的位置来插入按钮。虽然这有效,但我不认为创建者的意图是这样使用它。

如果我们无法修改初始化代码,初始化后是否有正确的方法将按钮添加到工具栏?


我找到了一个更优雅的解决方案,但它仍然感觉有点像黑客。这是我得到的:

// get an instance of the editor
var editor=tinymce.activeEditor; //or tinymce.editors[0], or loop, whatever

//add a button to the editor buttons
editor.addButton('mysecondbutton', {
  text: 'My second button',
  icon: false,
  onclick: function () {
    editor.insertContent('&nbsp;<b>It\'s my second button!</b>&nbsp;');
  }
});

//the button now becomes
var button=editor.buttons['mysecondbutton'];

//find the buttongroup in the toolbar found in the panel of the theme
var bg=editor.theme.panel.find('toolbar buttongroup')[0];

//without this, the buttons look weird after that
bg._lastRepaintRect=bg._layoutRect;

//append the button to the group
bg.append(button);

我觉得应该有比这更好的东西,但我没有找到。

其他注意事项:

  • 丑陋的_lastRepaintRect需要因为repaint方法,这使得按钮看起来很难看,无论你是否添加新的 控制或不控制
  • 查看代码,无法向其中添加新控件 工具栏无需重新绘制,并且没有办法绕过它 没有丑陋的黑客
  • append(b)相当于add(b).renderNew()
  • 您可以使用以下代码来添加按钮而无需破解,但您会短路许多其他内容:

Code:

bg.add(button);
var buttonElement=bg.items().filter(function(i) { return i.settings.text==button.text; })[0];
var bgElement=bg.getEl('body');
buttonElement.renderTo(bgElement);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TinyMCE初始化后修改工具栏的正确方法 的相关文章

  • 如何按照编写的顺序迭代 javascript 对象属性

    我发现了代码中的一个错误 我希望通过最少的重构工作来解决该错误 此错误发生在 Chrome 和 Opera 浏览器中 问题 var obj 23 AA 12 BB iterating through obj s properties for
  • 在为 RXJS 可观察量编写测试时,如何避免让调度程序通过我的业务逻辑?

    我发现使某些测试通过的唯一方法是显式地将调度程序传递给函数 为了便于说明 请考虑以下函数 function doStuff stream return stream delay 100 filter x gt x 2 0 map x gt
  • javascript中按tab键时如何调用函数?

    我有一个这样的功能 function whenEmpty field if field value field style backgroundColor ffcccc alert Please fill the field field f
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 如何流式传输 OpenAI 的完成 API?

    我想流式传输结果通过 OpenAI 的 API 完成 https beta openai com docs api reference completions 该文档提到使用服务器发送的事件 https developer mozilla
  • IE 中的 jQuery .width(val) 错误 - 无效参数

    通过ajax加载内部div book table 后 我想调整正文的宽度以适应更大的内容 var new width parseInt book table css width 407 body width new width 在 FF 和
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • 如何将送货地址复制到帐单地址

    我想知道是否可以将送货地址复制到帐单地址 当用户单击与送货地址相同的复选框时 送货地址值将被复制到账单输入字段 我完成了大部分部分 但我不确定如何将选择菜单 状态 值复制到帐单地址 我真的很感谢任何帮助 My code document r
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 如何将函数内的捕获错误传递给父级

    我有这几行代码示例 想知道下面的逻辑到底如何 try var response child console log why here catch err console log should show this err function c
  • 如何在 Google 地图 V3 中创建编号地图标记?

    我正在制作一张上面有多个标记的地图 这些标记使用自定义图标 但我还想在顶部添加数字 我已经了解了如何使用旧版本的 API 来实现这一点 我怎样才能在V3中做到这一点 注意 当您将鼠标悬停在标记上时 标题 属性会创建一个工具提示 但我希望即使
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • 以编程方式与 OS X 或 Linux 中的串行端口通信

    我有一个 Prolite LED 标牌 我喜欢将其设置为显示来自 apache 日志的滚动搜索查询和其他有趣的统计数据 问题是 我的 G5 没有串口 所以我必须使用 USB 转串口适配器 它显示为 dev cu usbserial 和 de
  • CoreData 问题:-[NSManagedObject setValue:]:无法识别的选择器发送到实例

    我昨天刚开始使用 CoreData 我快要疯了 我创建了一个使用 CoreData 的项目 勾选了框 使用 CoreData 创建了实体 然后为所有实体创建了 NSManagedObject 类 我想他们创建了实体的 setter 和 ge
  • Scala 与 Java 9 不兼容 - java.lang.NoClassDefFoundError

    在我的电脑上安装 Java 9 后运行一个示例 Scala SBT 项目 我就遇到了这个异常 我已经尝试了一些找到的解决方案 但一无所获 Java 9 和 Scala 之间是否存在不兼容的情况 斯卡拉版本 2 12 3 Java版本 jav
  • 如何返回导航堆栈?

    我的应用程序有 7 个后续视图控制器 VC1 VC7在我的导航栏中 我有一个带有操作的后退按钮 点击和长按 当在任何 VC 中长按后退按钮时 应用程序应转到 VC2 并呈现它 就好像用户从 VC1 转到 VC2 一样 具体来说 点击右后退按
  • 构建 ID 的测试结果

    作为计划构建的一部分 我运行并发布了多个具有不同测试运行标题的测试 我的场景是 在发布管道期间 我想获取为正在创建的版本的构建发布的每个测试运行标题的测试摘要 可以使用哪些 Azure DevOps API 或 API 组合来实现此目的 谢
  • 将光标传递到另一个活动是否安全?

    我正在尝试使用光标进行水平滑动 但我只是没有摸索某些东西 希望这里有人可以帮助我理解 我有一个显示项目列表的活动 它使用一个ListView由习俗支持CursorAdapter 并且该适配器由LoaderCallback 这都是标准的东西
  • 在Raspberry Pi上使用Selenium和Python登录zoom时出现错误401

    我正在学习使用 Selenium 我的目标是通过 Raspberry Pi 4 上的 python 程序打开 Zoom 运行粘贴的代码后 该程序按预期工作 打开放大浏览器 最大化窗口 选择并单击 登录 输入凭据 然后按 Enter 键 尝试
  • PARSE_DATETIME 格式化为一年中的某一天

    BigQuery 中与年份 j 格式设置元素一起使用的 PARSE DATETIME 函数存在问题 该函数似乎忽略了一年中的某一天元素 Eg select PARSE DATETIME Y j 2013243 returns 2013 01
  • PayPal API,寻找合适的 API

    我需要在我的网站中添加使用 PayPal 付款的选项 我想要一个 API 我可以在其中向 PayPal 发送信息并立即取回交易 ID 以便我可以将其保存在我的数据库中 哪种 API 最适合我 有没有办法做到这一点 我看到他们有这个清单 li
  • 使用 virtualenv 时在 pythonpath 中包含 Git 子模块

    我正在使用 Git 对 Django 项目进行版本控制 尽可能将所有不属于项目本身但项目所依赖的源代码作为 Git 子模块引入 这些生活在lib目录并且必须包含在 python 路径中 目录 文件布局如下所示 git docs lib my
  • Swift:如何使 UIView 在 UITableViewCell 中可点击?

    里面一个UITableViewCell 我正在尝试实现一个button与两个image and a text 看来是标准UIButton无法实现这一点 所以我创建了一个UIView其中包含一个UIImageView and a UILabe
  • 嵌入式 C++ 系统中的持续集成/单元测试

    通常使用哪些工具进行单元测试 尤其是嵌入式系统的持续集成 我特别认为你通常必须交叉编译和部署 而且你不能轻松地可视化目标平台 运行测试代码和框架也可能很困难 我可以用什么来缓解这些困难呢 我认为它应该是某种双重目标 构建服务器在更容易的目标
  • 重写 onSaveInstanceState

    我正在努力应对onSaveInstanceState类中的方法View https developer android com reference android view View html onSaveInstanceState 28
  • Apache Spark 的性能调优

    我正在开发一个项目 我必须调整 Spark 的性能 我发现了四个最重要的参数 它们将有助于调整 Spark 的性能 它们如下 火花记忆分数 Spark 内存 offHeap 大小 Spark Storage MemoryFraction S
  • Entity Framework Core 将不会映射到 BigInteger

    我需要使用BigInteger类来处理我的类的大整数 但是当尝试使用 Entity Framework Core 映射到数据库表时 我收到以下错误 该物业AllianceRank Reputation无法映射 因为 它是类型BigInteg
  • app-release.apk 是 zipaligned apk 吗?

    我使用的是Android Studio 1 0 2 当我在gradle任务中单击assembleRelease时 会生成两个文件 app release unaligned apk和app release apk 我知道 app relea
  • 使用 python 进行 SICP 的材料?

    我想用 Python 尝试 SICP 任何人都可以指出教授计算机程序的结构和解释的材料 视频 文章 python 目前正在学习 Abelson Sussman 和 Sussman 的 SICP 视频 我想这对你来说会很棒CS61A SICP
  • 尝试从应用内发送电子邮件但不起作用 - Swift (iOS)

    我尝试了来自不同网站的 2 个代码从我的 iOS 应用程序发送电子邮件 当我按下Send按钮它调用方法邮件撰写控制器并且总是返回日志 邮件已发送 作为result参数总是MFMailComposeResultSent value 即使我有
  • 管道中何时进行路由?

    ASP NET MVC 管道中何时进行路由 IIS 7 0 的 ASP NET 应用程序生命周期概述 http msdn microsoft com en us library bb470252 aspx 是否在第 2 步 执行 URL 映
  • TinyMCE初始化后修改工具栏的正确方法

    我正在使用 JavaScript 扩展云托管的 LMS 因此 我们可以在页面中添加javascript 但不能针对不同的组件修改供应商的javascript LMS 经常使用tinyMCE 目标是在每个tinyMCE编辑器的工具栏上添加一个