是否可以在调用的 javascript 文件上使用 javascript 获取查询参数,如下所示:
// in html
<script src="/file.js?query=string"></script>
// in file.js
console.log(this.location.query)
这是否可能,或者我必须使用服务器?
是否可以在调用的 javascript 文件上使用 javascript 获取查询参数,如下所示:
// in html
<script src="/file.js?query=string"></script>
// in file.js
console.log(this.location.query)
这是否可能,或者我必须使用服务器?
您可以将 id 属性附加到脚本标记,如下所示:
<script src="/file.js?query=string" id="query"></script>
然后调用它:
console.log(document.getElementById("query").src.split("query=")[1]);
一个小的工作示例代码如下:
<html>
<head>
<script src="aaa.js?query=abcd" id="query"></script>
</head>
<body></body>
</html>
这是 aaa.js 中的代码:
window.onload=function(){
alert(document.getElementById("query").src.split("query=")[1]);
}
我可以用下面的代码得到 src 。所以我认为你可以解析queryString。
document.currentScript.src
不,这是不可能的,因为脚本文件在全局 javascript 范围内没有表示。您只能在 DOM 中找到它的元素,如 haitaka 所示,但这是一种非常不标准的方式,当然也不推荐将参数传递给脚本。
我知道这是旧的,但我认为你不会介意(再)两美分......
如果您不向脚本元素添加 id,James Smith 有一个不需要 id 属性的片段。而且这种无 id 的特性是巨大的,因为您的脚本文件不需要与调用方的 ID 相结合。
// Extract "GET" parameters from a JS include querystring
function getParams(script_name) {
// Find all script tags
var scripts = document.getElementsByTagName("script");
// Look through them trying to find ourselves
for(var i=0; i<scripts.length; i++) {
if(scripts[i].src.indexOf("/" + script_name) > -1) {
// Get an array of key=value strings of params
var pa = scripts[i].src.split("?").pop().split("&");
// Split each key=value into array, the construct js object
var p = {};
for(var j=0; j<pa.length; j++) {
var kv = pa[j].split("=");
p[kv[0]] = kv[1];
}
return p;
}
}
// No scripts match
return {};
}
我知道这是旧的,但我想我会投入我的两分钱......
如果您已经在脚本元素中添加了一个 id,为什么不也添加一个自定义属性:
<script src="/file.js" id="query" value="string"></script>
然后您可以使用 getAttribute 获取值:
document.getElementById('query').getAttribute('value');
您可以使用document.currentScript.src
(仅在适当的时间)URLSearchParams
从调用的 JavaScript 文件中提取查询字符串。
例子:
在您的 HTML 中:
<script src="querystring.js?foo=bar&foo=bar2"></script>
在您的 JavaScript 文件中:
/**
* When this is being run, the document's last element will be this very script.
* Explanations on http://feather.elektrum.org/book/src.html
*/
var scripts = document.getElementsByTagName('script');
var index = scripts.length - 1;
var myScript = scripts[index];
// document.currentScript.src will be this file's URL, including its query string.
// e.g. file:///mytests/querystring.js?foo=script
/**
* Now just turn the query string (if any) into a URLSearchParams
to let us easily check values.
*/
var querystring = document.currentScript.src.substring( document.currentScript.src.indexOf("?") );
var urlParams = new URLSearchParams( querystring );
console.log( urlParams.getAll('foo') ); // Array [ "bar", "bar2" ]
记住:
urlParams.get
只会返回第一个值(作为字符串)urlParams.getAll
将返回一个数组(如果只提供一个值,则大小为 1。)我希望这有帮助。
当 HTML 文件使用带有包含查询字符串的src属性的Script标记来加载 JavaScript 程序时,您不能使用 location.search 来检索查询字符串,因为 location 不包含 URL(与href属性一样) )。可以使用“new URL(here.src).search”获取 URL,其中“here”是您在 Script id属性中使用的字符串。
因此,一种解决方案(来自其他地方的另一个答案,不解码参数)是
var queryDict = {};
new URL(here.src).search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
运行此代码后,queryDict 是一个包含参数属性/值对的对象。
尝试像这样使用javascript获取查询的值
alert(window.location.href.split["?"][1].split["="][1]);