43

我有一个名为main.js.

在里面main.js我想得到这个当前文件的绝对路径,比如:

http://server/app/main.js

http://server/app/script/main.js

获得绝对路径的最快方法是什么?

4

8 回答 8

45

您可以在以下位置调查脚本收集:

var scripts = document.getElementsByTagName("script");

对于返回scripts数组中的每个元素,您都可以访问其src属性。

当前执行的包含文件将始终是scripts数组中的最后一个。因此,您可以在scripts[scripts.length-1].

当然,这只会在初始代码运行时起作用,例如在加载初始脚本后调用的函数中没有用处,因此如果您需要稍后可用的值,则需要将其保存到变量中。

于 2012-11-07T01:31:05.817 回答
24

获取 javascript 文件的当前路径名

将它放在 /tmp 下的 apache 目录中,并将其命名为 test.html。访问网址

localhost/grader/test.html?blah=2#foobar

Javascript:

<html>
<script>
  alert(location.pathname);  // /tmp/test.html
  alert(location.hostname);  // localhost
  alert(location.search);    // ?blah=2
  alert(document.URL);       // http://localhost/tmp/test.html?blah=2#foobar
  alert(location.href);      // http://localhost/tmp/test.html?blah=2#foobar
  alert(location.protocol);  // http:
  alert(location.host);      // localhost
  alert(location.origin);    // http://localhost
  alert(location.hash);      // #foobar
</script>                            
</html>

有关位置属性的更多信息:http: //www.w3schools.com/jsref/obj_location.asp

或者如果你有 jquery:

<html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js">
</script>
<script>
  $(location).attr('href');      // http://localhost/tmp/test.html?blah=2#foobar
  $(location).attr('pathname');  // /tmp/test.html
</script>
</html>
于 2013-11-16T03:55:09.617 回答
2

这将起作用。但是,它要求您已经知道脚本的文件名是什么。但在大多数情况下,您会知道这一点。

function absFileLoc(filename) {
  var scriptElements = document.getElementsByTagName('script');
  for (var i = 0; i < scriptElements.length; i++) {
    var source = scriptElements[i].src;
    if (source.indexOf(filename) > -1) {
      var location = source.substring(0, source.indexOf(filename)) + filename;
      return location;
    }
  }
  return false;
}
于 2016-06-12T20:15:50.700 回答
2

现代方式

获取绝对路径最快的方法是使用document.currentScript

const url = document.currentScript.src;

还可以使用URL来读取 url 的组件:)

const url = new URL('http://www.example.com/cats');
console.log(url.hostname); // "www.example.com"
console.log(url.pathname); // "/cats"

所有现代浏览器都应该支持这些方法。

于 2019-09-04T19:27:18.123 回答
0
var path = document.location.pathname

将提供当前的 html 页面。

如果您查找当前脚本,请尝试本网站中提到的方式:

http://bencarpenter.co.uk/javascript-path-to-the-current-script

于 2012-11-07T01:35:30.847 回答
0

我知道这是一个较老的问题,但仍然是实际的,因为 IE 仍然不提供脚本 src。

我最好的形式是给脚本标签一个唯一的ID:

    <script id="kuvaScript" src="jscripts/kuva/kuva.min.js"></script>

在我使用的脚本中:

    var thisScript = $("#kuvaScript").attr("src");
    var thisPath = thisScript.split('/').slice(0, -1).join('/')+'/'; 

它将保持 src 格式原样(相对或完整),并在 IE 和 Chrome 中进行了测试。

希望它会为您节省很多时间。

于 2017-05-03T15:12:47.187 回答
0

好简单

把它放在你想要获取路径的 *.js 文件中:

let scripts = document.getElementsByTagName('script')
let lastScript = scripts[scripts.length -1]
console.log('lastScript', lastScript.src)
于 2018-01-12T14:05:05.410 回答
-2

如果要获取当前文件名或目录,请尝试此操作

location.href.split('/')[ location.href.split('/').length - 1 ];

于 2017-02-17T18:52:47.327 回答