如何获取.js文件的uri本身

时间:2010-06-03 14:38:58

标签: javascript

在JavaScript中是否有一个方法可以找到执行脚本的路径/ uri。

例如:

  1. index.html包含一个JavaScript文件stuff.js,由于stuff.js文件取决于./commons.js,因此它希望在页面中也包含它。问题是stuff.js只知道./commons.js与其自身的相对路径,并且不知道完整的URL /路径。

  2. index.html包含stuff.js<script src="http://example.net/js/stuff.js?key=value" />文件,stuff.js文件想要读取key的值。怎么样?

  3. 更新:有没有标准方法来执行此操作?即使在选秀状态? (我可以通过答案找出答案,答案是“不”。感谢所有回答)。

3 个答案:

答案 0 :(得分:5)

这应该为您提供当前脚本的完整路径(如果在请求时加载,则可能无效)。

var scripts = document.getElementsByTagName("script");
var thisScript = scripts[scripts.length-1];
var thisScriptsSrc = thisScript.src;

答案 1 :(得分:3)

如果您的脚本知道它被称为“stuff.js”,那么它可以查看DOM中的所有脚本标记。

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

然后它可以查看其名称的“src”属性。然而,对我而言,这似乎是你应该在服务器端真正解决的问题。

答案 2 :(得分:1)

script.aculo.ussource)解决了类似的问题。这是相关代码

var js = /scriptaculous\.js(\?.*)?$/;
$$('script[src]').findAll(function(s) {
    return s.src.match(js);
}).each(function(s) {
    var path = s.src.replace(js, ''),
    includes = s.src.match(/\?.*load=([a-z,]*)/);
    (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
    function(include) { Scriptaculous.require(path+include+'.js') });
    }); 

(某些部分,如.each需要原型)