Quiero incluir de forma asincrónica una versión específica de jQuery en una página que no controlo (plataforma de comercio electrónico) y solo usarla en mi script. La página puede cargar otras secuencias de comandos, que también pueden querer hacer lo mismo, y no sé el orden en que la página incluye mi secuencia de comandos frente a otras.
Usando jQuery.noConflict([removeAll]) , puedo asegurarme de que:
Creo que esta pregunta es diferente de la mayoría de las otras preguntas de versiones múltiples de jQuery porque las personas hacen suposiciones sobre el orden de inclusión del script y no usan la carga asíncrona de jQuery con devoluciones de llamada.
¡Gracias!
Aquí está mi intento de esto (¿alguien podría confirmar que esto está bien?):
miscript.js
(function() { var myJQuery; function loadjQuery(url, callback) { var runCallbackOnSuccess = function() { if (typeof jQuery != "undefined") { myJQuery = jQuery.noConflict(true); // NOTICE THIS LINE callback(); } }; var scriptTag = document.createElement("script"); scriptTag.setAttribute("src", url); scriptTag.onload = runCallbackOnSuccess; document.getElementsByTagName("head")[0].appendChild(scriptTag); } function doSomethingInMyScript() { myJQuery(document).ready(....); } loadjQuery("https://code.jquery.com/jquery-ABCmin.js", doSomethingInMyScript); })();otherscript.js (fuera de mi control, pero suponiendo que sea así)
(function() { function loadjQuery(url, callback) { <same as above, but without the noConflict() call> } function doSomethingInOtherScript() { jQuery(document).ready(....); } loadjQuery("https://code.jquery.com/jquery-XYZmin.js", doSomethingInOtherScript); })();¿Funcionará este código independientemente de:
Sospecho que debería estar bien siempre que las funciones de devolución de llamada se ejecuten inmediatamente después de que se cargue cada jQuery respectivo, sin posibilidad de que el código del otro script se intercale entre jQuery cargado y la devolución de llamada ejecutada.