0

可能重复:
如何获取查询字符串值?

比方说,我们<script>在 HTML 标记中有一个这样的标签

<script src="/path/file.js?test=1&data=2"></script>

..有什么方法可以访问其中的查询字符串file.js吗?window.location当然不会改变,因此您不能为此使用它。

如果这是不可能的,您如何将数据传递到脚本文件中?

4

4 回答 4

3

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 变量来实现您想要做的事情。

于 2012-09-19T23:55:53.837 回答
0

我能想到的唯一可靠的方法是通过document.currentScript但目前只有 Firefox 支持。

这个问题可能有一些有用的信息。

要将数据传递到脚本文件中,我可以使用全局变量。总的来说,我不太喜欢它们,但这可能是它们的合适用途。

于 2012-09-19T23:43:22.147 回答
0

听起来您想将一些数据从父文档传递到您包含的 javascript 文件中。你可以用一个全局变量来做,像这样

你的文件.html:

<script>
var myVar = "Hi";
</script>
<script src="script.js"></script>

脚本.js:

alert(myVar);
于 2012-09-19T23:53:27.490 回答
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]);
}

请注意,这只有在代码的最外层范围内才有效,即。不在函数中。它也不适用于异步或延迟脚本。

于 2012-09-20T00:00:02.527 回答