Selbst in modernen Browsern kann dies nützlich sein. Ich bin heute tatsächlich auf dieses Problem gestoßen, gerade weil ich vermeiden wollte, dass Javascript in mein HTML eingebettet wird.
Ich habe eine HTML - Seite , die auf serviert wird http://host/variable_app_name/pagename
, wo variable_app_name
viele Werte haben kann (y'know, Variable). Wenn es auf statische Dateien zugreifen möchte, muss es eine URL wie verwenden http://host/static/variable_app_name/filename
, daher kann ich den Speicherort der statischen Datei nicht angeben, ohne zuerst den Speicherort des Browsers zu überprüfen, um den Wert von zu ermitteln variable_app_name
.
Um auf die Haupt-Javascript-Datei zu verlinken, gehe ich wie folgt vor:
<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>
Der obige Code wird auch in der neuesten Version von Chrome explodieren, da das Skript-Tag in der Mitte einer Javascript-Zeichenfolge beendet wird und der Rest der Zeichenfolge wie folgt als HTML interpretiert wird:
<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>
Es gibt viele Möglichkeiten, dies zu beheben, aber ich verwende gerne einen HTML-Kommentar.
Mit HTML-Kommentar:
<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>
Aufbrechen der Javascript-Zeichenfolge:
<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>
Erstellen und anhängen Sie das Skript-Tag, anstatt document.write zu verwenden:
<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>
Ich verwende gerne den HTML-Kommentar, da es sich um eine kurze Änderung handelt und nicht für jede verknüpfte Datei repliziert oder überlegt werden muss.