Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取被调用javascript文件上的查询字符串_Javascript_File_Url_Query String - Fatal编程技术网

获取被调用javascript文件上的查询字符串

获取被调用javascript文件上的查询字符串,javascript,file,url,query-string,Javascript,File,Url,Query String,是否可以使用javascript在被调用的javascript文件上获取查询参数,如下所示: // in html <script src="/file.js?query=string"></script> // in file.js console.log(this.location.query) <script src="/file.js?query=string" id="query"></script> //在html中 //在fil

是否可以使用javascript在被调用的javascript文件上获取查询参数,如下所示:

// in html
<script src="/file.js?query=string"></script>

// in file.js
console.log(this.location.query)
<script src="/file.js?query=string" id="query"></script>
//在html中
//在file.js中
console.log(this.location.query)

这是否可能,或者我必须使用服务器?

您可以像这样将id属性附加到脚本标记:

// in html
<script src="/file.js?query=string"></script>

// in file.js
console.log(this.location.query)
<script src="/file.js?query=string" id="query"></script>
下面是一个小的工作示例代码:

<html>
<head>
<script src="aaa.js?query=abcd" id="query"></script>
</head>
<body></body>
</html>

尝试这样使用javascript获取查询的值

alert(window.location.href.split["?"][1].split["="][1]);

不,这是不可能的,因为脚本文件在全局javascript范围内没有表示形式。您只能在DOM中找到它的元素,如haitaka所示,但这是一种非常不标准的方法,当然不推荐将参数传递给脚本。

我可以用下面的代码获得src。所以我认为您可以解析queryString

document.currentScript.src

我知道这是旧的,但我想我会把我的两分钱

如果已经在向脚本元素添加id,为什么不同时添加自定义属性:

<script src="/file.js" id="query" value="string"></script>

我知道这是旧的,但我想你不会介意(再)多花两分钱

如果您没有向script元素添加id,则James-Smith会。这种无id的特性是巨大的,因为您的脚本文件不需要与调用方的id耦合

//从JS include查询字符串中提取“GET”参数
函数getParams(脚本名称){
//查找所有脚本标记
var scripts=document.getElementsByTagName(“脚本”);
//通过他们寻找我们自己
对于(变量i=0;i-1){
//获取参数的key=value字符串数组
var pa=scripts[i].src.split(“?”.pop().split(“&”);
//将每个key=value拆分为数组,即构造js对象
var p={};

对于(var j=0;j,您可以使用
document.currentScript.src
(仅在适当的时间)和
URLSearchParams
从调用的JavasScript文件中提取查询字符串

例如:

在HTML中:

<script src="querystring.js?foo=bar&foo=bar2"></script>
请记住:

  • 当脚本通过异步包含时,这可能不起作用
  • 得到还是得到?
    • urlParams.get
      将仅返回第一个值(作为字符串)
    • urlParams.getAll
      将返回一个数组(如果只提供一个值,则大小为1)

我希望这会有所帮助。

当HTML文件使用带有src属性的脚本标记来加载JavaScript程序时,您不能使用location.search来检索查询字符串,因为location不包含URL(与href属性一样)。可以使用“new URL(here.src).search”获取URL,其中“here”是脚本id属性中使用的字符串

因此,一个解决方案(来自其他地方的另一个答案,它不解码参数)是


运行此代码后,queryDict是一个包含参数属性/值对的对象。

您必须使用服务器AFAIK,但为什么不在调用JS文件之前在单独的
块中设置适当的JS变量呢?这会尝试在全局文档中查找查询,而不是在javascript文件中。我如何调用这是剧本里面的吗?是的,你可能是对的,但我想问一下,因为谁知道:)回答得好,但注意到IE不支持这一点,哈哈,很好……我们不应该再担心IE了
<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" ]
var queryDict = {};
new URL(here.src).search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})