可能重复:
如何获取查询字符串值?
比方说,我们<script>
在 HTML 标记中有一个这样的标签
<script src="/path/file.js?test=1&data=2"></script>
..有什么方法可以访问其中的查询字符串file.js
吗?window.location
当然不会改变,因此您不能为此使用它。
如果这是不可能的,您如何将数据传递到脚本文件中?
可能重复:
如何获取查询字符串值?
比方说,我们<script>
在 HTML 标记中有一个这样的标签
<script src="/path/file.js?test=1&data=2"></script>
..有什么方法可以访问其中的查询字符串file.js
吗?window.location
当然不会改变,因此您不能为此使用它。
如果这是不可能的,您如何将数据传递到脚本文件中?
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]);
注意:为简单起见,我使用 split 。您可能想使用 regex。
如果要重新加载 js 文件,只需重置源:
js_lib.src = js_url_pieces[0]+'?new query string';
我认为这应该适用于大多数浏览器。
或者,正如其他人所提到的,您可能想要编写更灵活的函数或使用全局变量来通过 _GET 变量来实现您想要做的事情。
我能想到的唯一可靠的方法是通过document.currentScript但目前只有 Firefox 支持。
这个问题可能有一些有用的信息。
要将数据传递到脚本文件中,我可以使用全局变量。总的来说,我不太喜欢它们,但这可能是它们的合适用途。
听起来您想将一些数据从父文档传递到您包含的 javascript 文件中。你可以用一个全局变量来做,像这样
你的文件.html:
<script>
var myVar = "Hi";
</script>
<script src="script.js"></script>
脚本.js:
alert(myVar);
当脚本运行时,该脚本是页面上的最后一个元素(由于 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]);
}
请注意,这只有在代码的最外层范围内才有效,即。不在函数中。它也不适用于异步或延迟脚本。