从插件中销毁编辑器的问题是,某些代码试图在破坏性插件代码之后使用编辑器,而实际上编辑器不再存在,导致错误和不稳定。
我已经为插件提出了以下代码,该插件使用async:true和setTimeout来关闭编辑器:
var cancelAddCmd =
{
modes : { wysiwyg:1, source:1 },
async: true,
exec : function( editor )
{
if(confirm('Are you sure you want to cancel editing and discard all content?')) setTimeout(function() { editor.destroy(); }, 100);
}
};
我看到的问题是它使用了一个狡猾的setTimout调用,根据计算机的执行速度可能会产生混合结果 - 在破坏编辑器的时候可能还没有超过100毫秒。
是否有正确的方法可以在插件中销毁编辑器?即使使用async:true;并且没有创建setTimeout错误。
如果可能的话,可能的解决办法是阻止任何与编辑器相关的现有/更多代码在之后运行吗?
我尝试过使用事件,比如on('afterCommandExec',function(){editor.destroy();})和其他一些事件,但这没有多大帮助...似乎没有当编辑器跳出堆栈调用以处理按钮时的事件。
并且没有办法通过更恰当地处理CKEditor实例来停止执行?
答案 0 :(得分:1)
如果我是正确的,您希望关闭CKEditor,但可能会或可能不会运行某些需要先完成的进程。
您应该做的是当您尝试使用CKEditor时,首先检查它是否仍然存在。如果没有,只需停止执行该功能。您还可以延迟销毁编辑器,例如将布尔值设置为false,然后再销毁它们。
答案 1 :(得分:1)
显然setTimeout是可以接受的,因为没有办法在JS中停止代码执行,就像PHP' die()一样。