首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中,如何获取JavaScript文件的URL,而不是位置URL?

问在JavaScript中,如何获取JavaScript文件的URL,而不是位置URL?
EN

Stack Overflow用户
提问于 2017-12-28 15:18:38
回答 1查看 121关注 0票数 0

我想使用查询字符串参数,这样就可以指定DOM元素的名称。

我有一些代码,需要的标题的高度,我希望这些代码的任何主题的工作。只有标头有时使用<header>标签,有时它有一个特定的标识符,有时它是一个特定的类……为了能够一次又一次地重用该代码,我希望以如下方式包含它:

代码语言:javascript
复制
<script src="https://www.example.com/js/my-script.js?c=header"></script>

我希望能够做的是从该JavaScript URL中获取"?c=header“部分,以便使用jQuery(".header")发送搜索一个DOM对象。我们有没有办法从正在执行的JavaScript中知道JavaScript本身的URL?

显然,我知道window.location.href,但这不是我要找的网址。

EN

回答 1

Stack Overflow用户

发布于 2017-12-29 07:32:16

正如@Kaiido在评论中提到的,有一个document.currentScript参数可以让您访问当前正在运行的<script>标记。只有一个小技巧,该参数是在第一次传递时定义的,而不是在脚本中执行函数时定义的。

因此,我们可以做的就是将这些信息保存在全局作用域或对象的静态范围中,或者至少保存该对象所需的信息。

在我的例子中,我只是执行了以下操作:

代码语言:javascript
复制
// Script to tweak things on many websites
var this_script_url = document.currentScript.src;

jQuery(document).ready(function()
  {
    // at this point: "document.currentScript === null"

    var qs = this_script_url.split("?", 2);
    if(qs && 2 == qs.length)
    {
      ... // handle qs[1] which is the query string (a=1&b=3&...)
    }
  });

请确保您使用的全局名称不要太通用。它应该包括您的脚本名称或其缩写。否则,您可能会与另一个脚本的全局脚本发生冲突。

现在,如果你有一个原型对象,我建议你使用静态成员而不是全局成员。

代码语言:javascript
复制
var my_class = {};

my_class.script_url = document.currentScript.src;

// and later you can reference it directly as in:
url = my_class.script_url;

这样,您更有可能避免冲突问题(发生冲突时,唯一需要更改的是名称my_class)。

此时,ES5或ES6类关键字不提供创建变量的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48003272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档