Incluso en los navegadores modernos, puede resultar útil. De hecho, me encontré con este problema hoy, precisamente porque quería evitar tener javascript incrustado en mi html.
Tengo una página html que se sirve en http://host/variable_app_name/pagename
, donde variable_app_name
puede tener muchos valores (ya sabes, variable). Si quiere acceder a archivos estáticos, tiene que usar una URL como http://host/static/variable_app_name/filename
, por lo que no puedo especificar la ubicación del archivo estático sin mirar primero la ubicación del navegador para encontrar el valor devariable_app_name
.
Para vincular al archivo javascript principal, hago lo siguiente:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
</script>
El código anterior explotará incluso en la última versión de Chrome, porque la etiqueta del script terminará en medio de una cadena de JavaScript y el resto de la cadena se interpretará como html, así:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js">
</script>
\n');
</script>
Hay muchas formas de solucionar este problema, pero me gusta usar un comentario html.
Con comentario html:
<script type="text/javascript" >
<!--
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
-->
</script>
Rompiendo la cadena javascript:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></scr'+'ipt>\n');
</script>
Cree y agregue la etiqueta de secuencia de comandos en lugar de usar document.write:
<script type="text/javascript" >
var variable_app_name = window.location.pathname.split('/')[1];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '/static/'+variable_app_name+'/pagename.js';
document.head.appendChild(script);
</script>
Me gusta usar el comentario html porque es un cambio conciso y no será necesario replicarlo o pensarlo en cada archivo vinculado.