From 6bb478d3fd14dade40f9c7413451c6215fd3eec0 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Sat, 7 Mar 2015 16:52:54 +0000 Subject: [PATCH] TinyMCE wpView: improve unbinding of mutationObserver in nested iframes. Props iseulde. See #31412. git-svn-id: https://develop.svn.wordpress.org/trunk@31667 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/js/mce-view.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/wp-includes/js/mce-view.js b/src/wp-includes/js/mce-view.js index 563ef5967c..acb1e682d8 100644 --- a/src/wp-includes/js/mce-view.js +++ b/src/wp-includes/js/mce-view.js @@ -467,7 +467,7 @@ window.wp = window.wp || {}; var dom = editor.dom, styles = '', bodyClasses = editor.getBody().className || '', - iframe, iframeDoc, observer, i, resize; + iframe, iframeDoc, observer, i; content.innerHTML = ''; head = head || ''; @@ -543,7 +543,7 @@ window.wp = window.wp || {}; iframeDoc.close(); - resize = function() { + function resize() { var $iframe, iframeDocHeight; // Make sure the iframe still exists. @@ -556,18 +556,20 @@ window.wp = window.wp || {}; editor.nodeChanged(); } } - }; + } if ( MutationObserver ) { - observer = new MutationObserver( _.debounce( function() { - resize(); - }, 100 ) ); + observer = new MutationObserver( _.debounce( resize, 100 ) ); observer.observe( iframeDoc.body, { attributes: true, childList: true, subtree: true } ); + + $( node ).one( 'wp-mce-view-unbind', function() { + observer.disconnect(); + } ); } else { for ( i = 1; i < 6; i++ ) { setTimeout( resize, i * 700 ); @@ -580,12 +582,11 @@ window.wp = window.wp || {}; if ( importStyles ) { editor.on( 'wp-body-class-change', classChange ); - } - $( node ).one( 'wp-mce-view-unbind', function() { - observer.disconnect(); - editor.off( 'wp-body-class-change', classChange ); - } ); + $( node ).one( 'wp-mce-view-unbind', function() { + editor.off( 'wp-body-class-change', classChange ); + } ); + } }, 50 ); callback && callback.apply( this, arguments );