Yes, this is the way to detect when the preview has loaded:
wp.customize.bind( 'ready', function() {
wp.customize.previewer.bind( 'ready', function( message ) {
console.info( 'Preview is loaded' );
} );
} );
This JS code should be enqueued at the customize_controls_enqueue_scripts
action with customize-controls
script as its dependency.