Даже в современных браузерах это может быть полезно. Сегодня я столкнулся с этой проблемой именно потому, что хотел избежать встраивания javascript в свой html.
У меня есть html-страница, на http://host/variable_app_name/pagename
которой variable_app_name
может быть много значений (ну, переменная). Если он хочет получить доступ к статическим файлам, он должен использовать URL-адрес, например http://host/static/variable_app_name/filename
, поэтому я не могу указать местоположение статического файла без предварительного просмотра местоположения браузера, чтобы найти значение variable_app_name
.
Чтобы связать с основным файлом 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"></script>\n');
</script>
Приведенный выше код взорвется даже в последней версии Chrome, потому что тег скрипта будет завершен в середине строки javascript, а оставшаяся часть строки будет интерпретироваться как 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>
Есть много способов исправить это, но мне нравится использовать html-комментарий.
С комментарием 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>
Разрыв строки 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>
Создайте и добавьте тег скрипта вместо использования 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>
Мне нравится использовать html-комментарий, потому что это краткое изменение, и его не нужно копировать или продумывать для каждого связанного файла.