即使在现代浏览器中,它也很有用。我今天实际上遇到了这个问题,正是因为我想避免在我的 html 中嵌入 javascript。
我有一个在http://host/variable_app_name/pagename 上提供的html 页面,其中variable_app_name 可以有很多值(你知道,变量)。如果它想访问静态文件,它必须使用像 http://host/static/variable_app_name/filename 这样的 url,所以如果不先查看浏览器的位置以找到 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 注释,因为它是一个简洁的更改,不需要为每个链接文件复制或考虑。