Jump to content

"Unexpected token <" cuando muevo Javascript al final


Recommended Posts

Hola a todos,

He activado la opción "Mover JavaScript al final" en las opciones de CCC, de manera que ahora están todas activadas excepto ""Smart cache" para las hojas de estilo (CSS)" (porque si la activo no me carga la página).

El resultado es que ha mejorado mucho la velocidad de carga de la página, pero a cambio obtengo el siguiente error al "inspeccionar" la página:

Uncaught SyntaxError: Unexpected token <

Al pulsar sobre el error y mostrar la línea donde aparece el error, me sale que es donde se cargan los Javascript, y subrayado en rojo sale lo siguiente (sólo  pongo lo que sale subrayado en rojo):

/* <![CDATA[ */;<script type="text/javascript"><script type="text/javascript"><script type="text/javascript"><script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"><script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"><script type="text/javascript"><script type="text/javascript"><script type="text/javascript">;/* ]]> */</script></body></html>

Así que supongo que el problema está en las siguientes líneas del header.tpl que, si no entiendo mal, son las que hacen que se carguen esos 2 scripts si el navegador es Internet Explorer 8:

		....
		{$HOOK_HEADER}
		{* MS 20170627 Exclude dependency of external font (according to https://www.dareboost.com/en/report/59505cec0cf2ac01150ac30e) *}
		{*<link rel="stylesheet" href="http{if Tools::usingSecureMode()}s{/if}://fonts.googleapis.com/css?family=Open+Sans:300,600&amp;subset=latin,latin-ext" type="text/css" media="all" />*}
		<!--[if IE 8]>
		<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
		<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
		<![endif]-->
	</head>

Antes de esas líneas, he añadido unos scripts para grabar las sesiones, antes utilizando Inspectlet, ahora Smartlook (los estoy testando):

 

		{* MS20170610 Begin Inspectlet Embed Code *}
<!-- MS20170130 Desactivado para probar smartlook (funciona con módulo)...
		{literal}
<script type="text/javascript" id="inspectletjs">
window.__insp = window.__insp || [];
__insp.push(['wid', xxxxxxxxx]);
(function() {
function ldinsp(){if(typeof window.__inspld != "undefined") return; window.__inspld = 1; var insp = document.createElement('script'); insp.type = 'text/javascript'; insp.async = true; insp.id = "inspsync"; insp.src = ('https:' == document.location.protocol ? 'https' : 'http') + '://cdn.inspectlet.com/inspectlet.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(insp, x); };
setTimeout(ldinsp, 500); document.readyState != "complete" ? (window.attachEvent ? window.attachEvent('onload', ldinsp) : window.addEventListener('load', ldinsp, false)) : ldinsp();
})();
</script>
		{/literal}
<!-- End Inspectlet Embed Code -->
		
{* MS20170130 Smartlook para grabar sesiones*}
{literal}
<script type="text/javascript">
    window.smartlook||(function(d) {
    var o=smartlook=function(){ o.api.push(arguments)},h=d.getElementsByTagName('head')[0];
    var c=d.createElement('script');o.api=new Array();c.async=true;c.type='text/javascript';
    c.charset='utf-8';c.src='https://rec.smartlook.com/recorder.js';h.appendChild(c);
    })(document);
    smartlook('init', 'xxxxxxxxxxxxxxxxxx');
</script>
{/literal}

Tengo la impresión de que los scripts de grabación no son el problema, porque si no muevo los Javascript al final, no sale el error. Además, también me salía sólo cuando estaba el Inspectlet. Pero doy toda la información por si acaso.

Además, tengo activado mod_pagespeed en el servidor.

 

1. ¿Tiene alguna influencia este error (en rendimiento, en posicionamiento Google, etc.)?

2. ¿Tiene algo que ver con el formato de los comentarios (<!-- -->, {* *},...)?

3. Estoy por cargarme esas líneas y pista, la mejora en rendimiento creo que tiene más importancia que "perder" los pocos usuarios que tengan IE8: ¿qué opináis?

 

Gracias por anticipado y siento el tocho, pero prefiero poner toda la información que creo relevante desde el principio.

Un saludo,

Edited by Pecatum (see edit history)
Link to comment
Share on other sites

Definitivamente los scripts añadidos a posteriori al header.tpl (INSPECTLET y SMARTLOOK) no tienen nada que ver: si elimino esas líneas del header (no comentarlas, sino eliminarlas del todo) también da el fallo al mover el Javascript al final...

Y utilizando el header.tpl original de Prestashop, también...

Edited by Pecatum (see edit history)
Link to comment
Share on other sites

Me voy respondiendo a mí mismo ;-). Parece que todo viene de la decisión de mover el Javascript al final en las opciones CCC, que hace que los scripts no se "escriban" correctamente. Veo que es un "problema" antiguo y recurrente, y estoy intentando asimilar toda la información de distintos posts: keep inline, media.php, etc. Aunque no sé si servirá a alguien, postearé aquí "mi" solución (1.6.1.4) si es que la consigo...

Un saludo,

Link to comment
Share on other sites

On 2/2/2018 at 7:54 PM, Code-Plus said:

Buenas, a algún código le falta un "<", no hay más, tendrás que revisar cual es.

Saludos

 

Sí, eso creía al principio. Pero todos los js que hay en mi página son de módulos "profesionales" (Google Analytics, etc.) y me extrañaba. Y si no muevo los JS al final, todos funcionan bien.

Lo dicho, cuando encuentre el problema, o alguna solución de las que se dan en todos los topics abiertos relativos a esto me funcione, lo cuento... Me lo estoy tomando con calma. Ahora ya no estoy tan obsesionado con mover el JS al final, he quitado el feed de Twitter y alguno más, y la página va mucho más rápida que antes ;).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...