包含Javascript的路径页面

问题描述:

如何获取包含的JavaScript文件的绝对路径或站点相对路径。包含Javascript的路径页面

我知道这可以在PHP中完成,(__file__,我想)。即使是包含页面,也可以检查路径(包含文件)。有没有什么办法让这种自我意识在JavaScript?

我知道我可以获取页面URL,但需要获取JS URL。

EG。 JavaScript需要修改页面上图像的src。 我知道图像与JavaScript文件的相对位置。我不知道Javascript是相对于页面的。

<body> 
    <img id="img0" src=""> 
    <script src="js/imgMaker/myscript.js"></script> 
</body> 

function fixPath(){ 
    $$("#img0")[0].set('src','js/imgMaker/images/main.jpg'); 
} 

请不要告诉我调整自己的功能 - 的例子被简化解释的必要。 在实际情况下,正在分发Mootools类,并且人们可以将其放入任何他们想要的文件夹中。

我只是读取脚本元素的src,但该类可以是任何数量的javascript文件的一部分,所以我不知道该元素的外观。

的JavaScript(的JScript)没有文件名的概念。它是在几天前为Netscape开发的。因此有没有__file__功能或类似的东西。

你能来最接近的是这两种可能性:

  1. 你已经提到什么:收获所有的JS文件的所有src属性,并试图找出哪一个是正确的。

  2. 使其成为必要的选项,必须在嵌入HTML文件中设置图像的路径。如果没有设置,使用合理和充分证明默认:


<script type="text/javascript"> 
var options = { 
    'path_to_images': '/static/images/' // defaults to '/js/img/' 
}; 
</script> 
+0

这可以在Jscript中完成吗?或许我应该添加一个小片段来捕捉IE,至少? – SamGoody 2009-12-07 09:54:03

+0

不,我只是提到过,因为您可以在Windows机器上执行JScr​​ipt文件,并且您可以通过所谓的Windows Script Host访问文件。在IE中也没有运气,对不起。 – Boldewyn 2009-12-07 10:07:03

,如果您有文件夹:

/webroot 
    /images 
    /scripts 

然后图像会/images/whatever.jpg的绝对路径和脚本将/scripts/js.js

+0

没错。我将剧本分发给1,000,000人。一些会有一个名为脚本的文件夹,一些会有一个名为js的文件夹,有些则不会有文件夹。我知道图像与脚本文件的相对位置。但我没有脚本文件的路径。我如何获得? – SamGoody 2009-12-07 09:23:39

+0

我知道图像与脚本相关的位置,因为我正在分发包含文件和图像的文件夹,并且我告诉他们必须将该文件夹原样复制到其服务器中。但是他们可以将文件夹放在服务器上的任何位置,只要他们将脚本包含在他们的页面中即可。 – SamGoody 2009-12-07 09:24:54

路径的绝对路径到JS是无关紧要的;即使您从外部JS修改它们,HTML文件中的链接也始终是相对于HTML文件的。

[编辑]如果你需要建立相对于当前网页的路径,你可以找到它的document.location.pathname路径。这个路径是相对于web根目录的,但你应该能够找到一个已知的子路径,然后从那里开始工作。

例如,对于此页面,它pathname将是/posts/1858724。你可以找posts,然后从那里建立一个相对路径(例如posts/../images/smiley.png

+1

这对于JS来说是正确的,但对于CSS来说则是如此。 CSS文件中的链接与CSS文件相关,而不是HTML文件。 – Marius 2009-12-07 08:58:08

+0

这就是要点!再说一遍:我知道图像与JavaScript文件相关的位置。我不知道Javascript是相对于页面的。由于我将插入到页面的路径必须是相对页面,我需要知道JavaScript文件的路径才能创建正确的路径! – SamGoody 2009-12-07 09:21:38

+0

哦,这很简单:您可以在document.location.pathname中找到页面的路径它与web根目录相对,但您应该能够找到已知的子路径,然后从那里开始工作。 – 2009-12-07 13:26:16

我用下面的方法来获取基本URL,并使用它加载其他prorotypes,也许这是你需要的。让我们说当前的脚本名称是'clone.js'。

/* 
    * get the base URL using current script 
    */ 

    var baseURL = ''; 
    var myName = 'clone.js'; 
    var myPattern = /(^|[\/\\])clone\.js(\?|$)/; 

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

    for (var i = 0; i < scripts.length; i++) { 
     var src; 
     if (src = scripts[i].getAttribute("src")) { 
      if (src.match(myPattern)) { 
       baseURL = src.replace(myName, ''); 
       break; 
      } 
     } 
    } 

瓦尔基本URL应该包含你所需要的。基于

http://ejohn.org/blog/file-in-javascript/

(function(){ 
    this.__defineGetter__("__FILE__", function() { 
    return (new Error).stack.split("\n")[2].split("@")[1].split(":").slice(0,-1).join(":"); 
    }); 
})(); 

(function(){ 
    this.__defineGetter__("__DIR__", function() { 
    return __FILE__.substring(0, __FILE__.lastIndexOf('/')); 
    }); 
})(); 

再后来

img.setAttribute('src', __DIR__ + '/' + file); 
+0

这很酷。不幸的是它只适用于FF。 – Boldewyn 2009-12-07 10:38:14

我知道这个问题被问一段时间回来,但我也有类似的情况,山姆。

在我的情况,我有两个原因的情况:

  1. 用户可以访问不同的子域,每个都有自己的索引页。
  2. 用户可以输入一个导致index.php来调整路径的密码。

大多数参考文献指向脚本的相同src位置,但有些不。例如,树中不同级别的人需要不同的路径。

我通过给索引页面的脚本标签分配一个id来解决这个问题。例如,头部可能包括...

<script id='scriptLocation' type='text/javascript' language='javascript' src='../scripts.test/script.js'></script> 

我的JavaScript就能够读取路径...

var myPath = document.getElementById("scriptLocation").src; 

找到另一种方法,也许有人更JS忍者可以刷新这一点。

CSS样式表能够找到使用document.stylesheets.ownernode调用它们的节点。

我找不到类似的JavaScript文件调用。

但是,在某些情况下,如果可以将CSS文件与javascript一起包含,并为第一个规则提供一些唯一标识符。 可以遍历所有样式表,直到找到具有标识符[if(document.stylsheets [i] .cssRules [0] == thisIs:myCSS)]的标识符,然后使用ownerNode获取该文件的路径并假设JS也是一样。

费解并且不是很有用,但它的另一种方法 - 可能会引发某人更好的想法。