如何访问javascript文件中的查询字符串

时间:2012-09-19 23:42:00

标签: javascript html query-string

  

可能重复:
  How can I get query string values?

可以说,我们在HTML标记

中有一个<script>标记
<script src="/path/file.js?test=1&data=2"></script>

..有没有办法访问file.js中的查询字符串? window.location当然没有改变,因此你无法使用它。

如果无法做到这一点,您如何将数据传递到脚本文件?

4 个答案:

答案 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]);
}

请注意,只有当它位于代码的最外层范围内时才会起作用,即。不是在一个功能。它也不适用于异步或延迟脚本。