<script type="text/javascript"> var $ctx='<%=request.getContextPath()%>'; </script>
然后这个$ctx参数才能在其他JS文件中获取到。
但这对于笔者这种代码强迫症“患者”来说,无疑是比较痛苦的,因为它要写一个额外的script标签。
笔者在浏览一些网站时,突然看到有很多JS引用后面携带了参数,于是折腾了一会儿,下面就提供一种另类的解决方案:
<script src="mine.js?ctx=<%=request.getContextPath()%>" type="text/javascript"></script>
然后在mine.js中开头写上这么一句话:
var js=document.scripts; var url=js[js.length-1].src; var $ctx=getQueryString(url,'ctx'); function getQueryString(url,name){ var reg = new RegExp("(\\?|&)"+ name +"=([^&]*)(&|$)"); var r = url.substr(1).match(reg); if(r!=null)return unescape(r[2]); return null; }
这里面一个非常重要的一点在于,如果页面中有很多js引用,而mine.js无论插在开头还是末尾亦或中间,var url=js[js.length-1].src;这一行代码都能获取到mine.js自身的url。
这其中的原因大致就是JS从上到下解释执行模式所带来的一个小福利了。