是否有可能像这样在被调用的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
// 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 {};
}
document.currentScript.src
和 URLSearchParams
从调用的 JavaScript 文件中提取查询字符串。
示例:
在您的 HTML 中:
<script src="querystring.js?foo=bar&foo=bar2"></script>
/**
* 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)。希望这可以帮到你。
我知道这已经过时了,但我想发表一下我的看法...
如果您已经向脚本元素添加了id,为什么不再添加一个自定义属性呢:
<script src="/file.js" id="query" value="string"></script>
然后您可以使用getAttribute获取该值:
document.getElementById('query').getAttribute('value');
var queryDict = {};
new URL(here.src).search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
alert(window.location.href.split["?"][1].split["="][1]);