Навіть у сучасних браузерах це може бути корисно. Я насправді зіткнувся з цією проблемою сьогодні, саме тому, що хотів уникнути вбудовування JavaScript у мій html.
У мене є html-сторінка, яка обслуговується http://host/variable_app_name/pagename
, де variable_app_name
може мати багато значень (y'know, змінна). Якщо він хоче отримати доступ до статичних файлів, він повинен використовувати 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, тому що це лаконічна зміна, і для кожного зв’язаного файлу йому не знадобиться тиражування чи обдумування.