it-roy-ru.com

Есть ли событие или другой метод, который сообщает мне, что предварительный просмотр загружен?

Я работаю над плагином для WordPress Customizer и мне нужно вызвать функцию, когда загрузчик предварительного просмотра загружен. Есть ли событие или другой метод, который сообщает мне, что предварительный просмотр загружен?

Если бы попробовали:

jQuery(window).load (function() { // Customizer loaded...
   wp.customize.previewer.bind( 'refresh', function() { // doesn't seem to work ?!
      alert ('Previewer has loaded'); 
   }
}

Я также пробовал wp.customizer.bind('refresh', function (){

Нет ли события, которое запускается при загрузке предварительного просмотра? Событие refresh запускается при обновлении средства просмотра.

Есть идеи?

1
Milli

Да, это способ определения момента загрузки предварительного просмотра:

wp.customize.bind( 'ready', function() {
  wp.customize.previewer.bind( 'ready', function( message ) {
     console.info( 'Preview is loaded' );
  } );
} );

Этот код JS должен быть поставлен в очередь при действии customize_controls_enqueue_scripts со сценарием customize-controls в качестве его зависимости.

0
Weston Ruter

Я не нашел событие API Customizer для загрузки предварительного просмотра. Вот решение с событием on load в iframe:

// Assures that the code gets runned once per load.
var code_has_run = false;

function preview_loader(){
    // When the customizer has loaded the iframe does not
    // exist yet. This checks if the iframe exists.

    if (jQuery('#customize-preview iframe').length > 0){    

        // When iframe/preview has loaded.
        jQuery('#customize-preview iframe').on('load', function (){

            // Wait a little until old frame is removed.
            setTimeout(function (){
                if (code_has_run == false){
                    // Code to be run when preview has loaded and is ready.
                    alert('Preview loaded');
                }
                code_has_run = true;

                // Wait until multiple load events are finished. 
                setTimeout(function(){
                    code_has_run = false;
                }, 1000);
            }, 1000);          
        });
    }
}

jQuery(window).load (function() { // Customizer loaded...

    //Call preview_loader if the preview loads under 500ms.
    preview_loader();

    setInterval(preview_loader, 500);  
}
0
Milli