得到"操作不安全”;通过tinymce添加tinymce时出错.EditorManager.execComma

Getting "The operation is insecure" error when adding tinymce via tinyMCE.EditorManager.execCommand( 'mceAddControl',false, newId);

本文关键字:tinymce 添加 出错 execComma EditorManager quot 操作 不安全 得到 通过      更新时间:2023-09-26

编辑:请参阅我对发现的问题和解决方案的回答。这是由于iframe调用上下文,尽管是同一域

我不明白为什么会发生这个错误。我正在经历以下步骤:

  1. 删除tinyMCE编辑器

  2. 更改文本区域的id

  3. 将tinymce编辑器添加到具有新id 的文本区域

代码

//Remove the tinyMCE editor for this text area (CHANGING TO "true" DOESN't HELP)
tinyMCE.EditorManager.execCommand('mceRemoveControl',false, myTextArea.id );

//Change the id
myTextArea.id = newId;
//Add a tiny mce editor  (CHANGING TO "true" DOESN't HELP)
tinyMCE.EditorManager.execCommand('mceAddControl',false, newId);

最后一个抛出错误the operation is insecure。为什么?我该怎么做?

对于任何面临类似问题的人,以下是问题所在以及我是如何解决的:

问题

  1. 我向同一域的iframe提交了一个表单(因为它有文件输入,我不能使用ajax)

  2. 然后iframe在父窗口中调用一个方法,让它知道它已经完成了:window.parent.myObject.handleResponse( {} );

  3. 在方法handleResponse中,我删除并添加了tinymce编辑器。

问题是tinymce创建了自己的iframe,所以即使它是同一个来源/域,而不是交叉来源,浏览器(Firefox)还是拒绝了它,因为它是一个不安全的操作,子框架调用在另一个iframe中执行某些操作的父窗口的方法。尽管它们都是同一个域,但调用上下文不允许这样做。

解决方案

  1. 在将表单提交到iframe之前,请通过setInterval启动一个"观察程序",检查要设置的响应值。

  2. window.parent.myObject.handleResponse( {} );简单地设置响应值

  3. 当观察程序(在父窗口的上下文中启动)看到变量已设置时,它可以更改所有的tinymce编辑器。