Usando async me deja de funcionar este script

  • Autor Autor AlexxxBcN
  • Fecha de inicio Fecha de inicio
A

AlexxxBcN

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola , al añadir async en la libreria jquery el script que hace funcionar el menu en la version mobile me deja de funcionar
Alguna forma para que al añadir async me funcione dicho script ? Gracias.

Aclarar que esos scripts , están en el mismo codigo <script> .... </script>
Por si eso tiene que ver , y mejor estén por separado a la hora de ponerle async


Update:

Usando jquery me carga 3 script , sin añadir async me funcionan bien MIS SCRIPTS ( menu version móvil - boton subir arriba - Indice por etiquetas )
Trás muchas pruebas estos días añadiéndole código para funcionar con async ... , y viendo el funcionamiento : aveces puede que incluso me funcionen los 3 a la vez ... aveces solo 1 .. aveces 2... pero inestable , y en la consola me muestra errores

Probé varios codigos ... unos mejor que otros , algunos los entiendo otros no ....

Otra posible solución compartida por el usuario agiadas
Loading jQuery asynchronously - JavaScript - Ibrahim Diallo

Dejo aqui un código para poner async en la carga de srcripts , por si alguno le sirve o conoce el funcionamiento ...


Opción 1

<script async id="jquery" type="text/javascript" src="https://code.jquery.com/jquery-2.2.3.js"></script>
Then I call a script using jquery :

<script type="text/javascript">
document.getElementById('jquery').addEventListener('load', function () {
App.init();
OwlCarousel.initOwlCarousel();
FancyBox.initFancybox();
StyleSwitcher.initStyleSwitcher();
});
</script>


Opción 2
<script async type="text/javascript" src="path_to_jquery" id="jquery_script_tag">
</script>

<script>
if ( !('jQuery' in window) )
{
window.jQueryQueue = [];
//define temporary jQuery function
window.jQuery = function(){
//just save function parameters to queue
jQueryQueue.push( arguments );
}
document.getElementById('jquery_script_tag').addEventListener('load', function(){
//call jQuery with parameters saved in queue, after it loaded
for ( var i in jQueryQueue )
jQuery.apply( document, jQueryQueue );
});
}
</script>

Opción 3

<script>
var async = async || [];
(function () {
var done = false;
var script = document.createElement("script"),
head = document.getElementsByTagName("head")[0] || document.documentElement;
script.src = 'jquery.js';
script.type = 'text/javascript';
script.async = true;
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
done = true;
// Process async variable
while(async.length) { // there is some syncing to be done
var obj = async.shift();
if (obj[0] =="ready") {
$(obj[1]);
}else if (obj[0] =="load"){
$(window).load(obj[1]);
}
}
async = {
push: function(param){
if (param[0] =="ready") {
$(param[1]);
}else if (param[0] =="load"){
$(window).load(param[1]);
}
}
};
// End of processing
script.onload = script.onreadystatechange = null;
if (head && script.parentNode) {
head.removeChild(script);
}
}
};
head.insertBefore(script, head.firstChild);
})();
</script>




Si lo dejo así el script me funciona
<script src='//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'/>

Si lo dejo así el script deja de funcionar
<script src='//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js' async />

o

<script async='async' src='//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'/>


MIS SCRIPTS


//Scrip menu
<script>
//<![CDATA[
(function(b){var a=(function(){var p={bcClass:"sf-breadcrumb",menuClass:"sf-js-enabled" ......
//Scrip menu
//Menu Call
function menunav(b){b("#mobilenav").click(function(){b("#menunav").....

//ImagePOST
function bp_thumbnail_resize( .......

//backto top
jQuery(document).ready(function() {
var offset ......
//]]>
</script>






<a href='#' id='mobilenav'>Select Menu .......

[B//]Scrip menu[/B]
<script>
//<![CDATA[
menunav (jQuery);
//]]>
</script>
 
Última edición:
En blogger tienes que poner:

async="async"
 
Gracias , también lo habia probado de esa forma pero tampoco , otros scripts siguen funcionando , pero Superfish me deja de funcionar y en consola me sale este error : ReferenceError: jQuery is not defined
 
sucede que no todos los scripts se pueden cargar de forma diferida
en algunos casos, es imperativo que un js esté cargado para que otro pueda hacer referencia a ella.

...
de ahí ese error.

- - - Actualizado - - -

...
entonces la solución pasa por cargar en forma secuencial, primero la librería necesaria y luego que ésta esté presente, recién ahí la que se quiere o necesita
 
Gracias por la informacion , lo último que me comentas doy a entender que teniendo la libreria debajo de head <script src='//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js' async />
Tambien me dices que esa misma libreria la tengo que tener en alguna parte de <script>//<![CDATA[ // Superfish v1.7.2 ..... ...

O dime como puedo buscar info al respecto
 
Has mirado la compatibilidad con el navegador del móvil?
 
Ya sea desde el movil ... o desde pc haciendo zoom ( al hacer zoom me muestra el boton del menu ) tengo ese problema
 
Al tenerlo en async el navegador no espera a que termine de cargar el script, sigue procesando código. Por otro lado tienes algún script intentando llamar a funciones de jQuery, pero cuando hace la llamada todavía no se ha cargado jQuery y por eso te da el pete de que no está definido. Googleando un poco puedes encontrar soluciones, aquí va una:
Loading jQuery asynchronously - JavaScript - Ibrahim Diallo
 
Gracias por la informacón , ayer miré ese tipo de soluciones , no recuerdo si ese enlace es uno de los que miré , estado mirando e intentado implementarlo sin resultados , aunque puede que alguno script no lo ponga bien , sigo mirando ...
 
Atrás
Arriba