在JavaScript中,如何获取JavaScript文件的网址,而不是位置网址?

时间:2017-12-28 07:18:38

标签: javascript jquery url query-string

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

我有一些代码需要标题的高度,我希望该代码适用于任何主题。有时标题使用<header>标记,有时它有特定的标识符,有时它是特定的类...为了能够一遍又一遍地重用该代码,我喜欢以这样的方式包括它:

<script src="https://www.example.com/js/my-script.js?c=header"></script>

我希望能够做到的是&#34;?c =标题&#34;部分来自该JavaScript URL以使用jQuery(".header")发送搜索DOM对象。我们是否有办法从正在执行的JavaScript中了解JavaScript本身的URL?

显然,我知道window.location.href并且不是我正在寻找的网址。

1 个答案:

答案 0 :(得分:0)

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

所以我们可以做的就是在全局范围或对象中的静态中保存这些信息,或者至少是你需要的信息。

就我而言,我只是做了以下事情:

// 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&...)
    }
  });

请确保您没有使用过于通用的全球名称。它应包括您的脚本名称或其缩写。否则,您可能会与另一个脚本的全局冲突。

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

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 class关键字不允许您创建变量。