-
Bug
-
Resolution: Fixed
-
Major
-
8.5.1.1
-
None
-
Security Level: Jimmy
-
None
-
ZK 8.5.2 S1, ZK 8.5.2 S2
Steps to Reproduce
http://zkfiddle.org/sample/2rvbcep/1-ckeditor-modal-close-iframe-destroy
Click the close button on the modal window.
Current Result
the iframe DOM element (not ZK iframe component) included in the Editor DOM tree is removed by the window modal onClose workflow.
This cause a warning in the console.
Expected Result
ZK should only remove ZK based iframes from the DOM
Debug Info
The editor DOM is detroyed before the editor JS object is destroyed during widget.unbind_
This causes a warning in the client console:
[CKEDITOR] Error code: editor-destroy-iframe.
(anonymous)
[CKEDITOR] For more information about this error go to http://docs.ckeditor.com/#!/guide/dev_errors-section-editor-destroy-iframe
This behavior prevents ZK iframes components from being reloaded when moved around the DOM tree. However, it also affects non-ZK iframes.
Root Cause
Affect window and panel:
Window:
https://github.com/zkoss/zk/blob/master/zul/src/archive/web/js/zul/wnd/Window.js#L1166
https://github.com/zkoss/zk/blob/master/zul/src/archive/web/js/zul/wnd/Window.js#L1203
Also in panel:
https://github.com/zkoss/zk/blob/master/zul/src/archive/web/js/zul/wnd/Panel.js#L868
Workaround
<script><![CDATA[ zk.afterLoad('zul.wnd', function() { var xWindow = {}; zk.override(zul.wnd.Window.prototype, xWindow ,{ onClose : function() { this.$n().querySelectorAll(".z-ckeditor").forEach(function(elem){ zk.$(elem)._editor.destroy(true); delete zk.$(elem)._editor; }); var result = xWindow.onClose.apply(this, arguments); return result; } });//zk.override });//zk.afterLoad ]]></script>