可以说,我们在HTML标记
中有一个<script>
标记
<script src="/path/file.js?test=1&data=2"></script>
..有没有办法访问file.js
中的查询字符串? window.location
当然没有改变,因此你无法使用它。
如果无法做到这一点,您如何将数据传递到脚本文件?
答案 0 :(得分:1)
Musa在这里有正确的方法(来自评论)。您可以像访问任何其他标签一样访问脚本标记(您可以使用ID来简化):
<script id='my_script_1' src="/path/file.js?test=1&data=2"></script>
然后解析出src并只获取查询字符串:
var js_lib = document.getElementById('my_script_1');
var js_url = js_lib.src;
var js_url_pieces = js_url.split('?');
alert(js_url_pieces[1]);
注意:为简单起见,我使用拆分。您可能需要use regex。
如果要重新加载js文件,只需重置源:
js_lib.src = js_url_pieces[0]+'?new query string';
我认为这应该适用于大多数浏览器。
或者,正如其他人所提到的,您可能希望编写更灵活的函数或使用全局变量来实现您尝试通过_GET变量进行的操作。
答案 1 :(得分:0)
我能想到的唯一可靠的方法是通过document.currentScript,但目前仅由Firefox支持。
This question可能会提供一些有用的信息。
要将数据传递到脚本文件,我可以使用全局变量。我一般不喜欢它们,但这对他们来说可能是合适的用途。
答案 2 :(得分:0)
听起来您想将父文档中的一些数据传递到包含的javascript文件中。您可以使用全局变量来完成,如此
您-file.html:
<script>
var myVar = "Hi";
</script>
<script src="script.js"></script>
的script.js:
alert(myVar);
答案 3 :(得分:0)
当脚本运行时,该脚本是页面上的最后一个元素(由于JavaScript被阻止)。你可以利用这个:
var scripts = document.getElementsByTagName('script'),
me = scripts[scripts.length-1],
myurl = me.getAttribute("src"),
myquery = myurl.split("?")[1].split("#")[0].split("&"),
qcount = myquery.length, query = {}, i, tmp;
for( i=0; i<qcount; i++) {
tmp = myquery[i].split("=");
query[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp[1]);
}
请注意,只有当它位于代码的最外层范围内时才会起作用,即。不是在一个功能。它也不适用于异步或延迟脚本。