tinymce - 如何访问 TinyMCE 5 URL 对话框中的输入字段

标签 tinymce tinymce-5

我正在将 TinyMCE 3 安装移植到版本 5。我设置了一个工具栏按钮,该按钮打开一个包含自定义页面的对话框,因此使用新的 windowManager.openUrl 加载。方法。我也有一些页脚按钮,当然还有 onAction( dialogApi, details )单击按钮时调用的处理程序。 details.name包含被点击的按钮的名称,所以我可以单独对每次点击使用react。

似乎,当使用常规对话框时,我在 plugin.js 中配置了每个输入字段。文件并通过 getData 检索其值传入我的第一个参数的方法 onAction处理程序。我的dialogApi中没有这个方法为 URL dialog .

我的 iframe/对话框包含一个下拉列表,我想在单击对话框页脚按钮时将所选值插入到编辑器实例中。我知道我可以使用 postMessage将信息从 iframe 发送到插件,但这不是我想要的。

当单击按钮并通过 openUrl 打开我的对话框时,如何访问对话框中的输入字段?如何访问对话框 iframe 中的文档? this似乎是我传入的 JavaScript 对象 openUrl . document是嵌入编辑器的页面。

最佳答案

我制作了一个演示,展示了从 iframe 对话框中的用户输入获取数据的两种不同方式:
https://codesandbox.io/embed/tinymce-dialog-openurl-demo-fpfew

这篇博文也是在 TinyMCE 中使用 iframe 对话框的绝佳资源:
https://www.martyfriedel.com/blog/tinymce-5-url-dialog-component-and-window-messaging

我的演示中的第一种方法使用 iframe 本身的 HTML 中的按钮。该按钮收集用户数据并使用 postMessage将该数据发送回 TinyMCE 编辑器。

如您所见,使用页脚按钮的过程比“in iframe”按钮要复杂一些。本质上,页脚按钮向对话框中的 iframe 发送一条消息,要求 iframe 收集用户数据并将其插入 TinyMCE。

使用 iframe 时,您必须遵守浏览器安全策略,因此大多数情况下您不能直接与 iframe 交互(除非 iframe 使用相同的域)。以下是有关 iframe 安全策略的更多信息:

https://security.stackexchange.com/questions/67889/why-do-browsers-enforce-the-same-origin-security-policy-on-iframes

这也意味着 TinyMCE 无法像使用 TinyMCE 对话框那样知道 iframe 中的内容,因此需要“手动”获取数据。考虑到这一点,如果是跨域请求(不同域),则无法在不使用 postMessage 的情况下访问 iframe 内容。 .
getData提到的方法适用于 TinyMCE 对话框,因为对话框中的所有内容都是 TinyMCE 组件。 TinyMCE 组件有一个自定义的值/状态概念,getData可以访问返回数据。

当您使用 URL 对话框时,该对话框不再使用 TinyMCE 组件,因此无法收集 getData 的数据。 ,因此该方法不存在。这就是为什么您必须从 URL 对话框中的任何元素手动获取所需的数据,然后使用 postMessage 将它们发送回 TinyMCE。 .

关于tinymce - 如何访问 TinyMCE 5 URL 对话框中的输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188838/

相关文章:

javascript - TinyMCE4 网址列表

jquery - 等待 TinyMCE 加载

tinymce - 表里面有 div 按删除表我的 div 元素在 TinyMCE 中删除

javascript - 如何将自定义按钮和对话框迁移到 TinyMCE 5

tinymce - 在“插入/编辑链接”对话框中插入自定义按钮?

javascript - 响应式文件管理器出现tinyMCE上传错误

javascript - 防止 TinyMCE 在 <!--[if lt IE9]> 标签中添加空格?

tinymce - Tumblr 帖子允许使用哪些 HTML 属性? (小小)

javascript - 执行 RemoveFormat 时删除 <br> 标签

javascript - 将TinyMCE字符映射插件与多个配置一起使用