En mi código, estoy escaneando una página para ver si encontramos algo con una clase de "coceon" (una biblioteca JS de comparación de imágenes), si lo encontramos, cargamos los scripts de cocoen para luego ejecutarlo.
El código:
/* cocoen image comparison */ if ($('.cocoen').length) { var cocoen_js = Promise.resolve($.cachedScript("/includes/jscripts/cocoen/js/cocoen.min.js")); var cocoean_jquery = Promise.resolve($.cachedScript("/includes/jscripts/cocoen/js/cocoen-jquery.min.js")); Promise.all([cocoen_js, cocoean_jquery]).then(() => { $('.cocoen').cocoen(); }); }El problema es que a veces simplemente falla y la consola del navegador me dice esta línea:
$('.cocoen').cocoen();Falla porque cocoen no es una función. Entonces, a veces no está cargado y listo cuando es necesario. ¿Especialmente cuando se hace una actualización completa, algo parece bloquearlo? ¿Hay alguna manera de asegurarse de que realmente esté cargado para luego ejecutarse?
El código del script de caché si también necesita verlo:
jQuery.cachedScript = function( url, options ) { // Allow user to set any option except for dataType, cache, and url options = $.extend( options || {}, { dataType: "script", cache: true, url: url }); // Use $.ajax() since it is more flexible than $.getScript // Return the jqXHR object so we can chain callbacks return jQuery.ajax( options ); };