包含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__
功能或类似的东西。
你能来最接近的是这两种可能性:
你已经提到什么:收获所有的JS文件的所有
src
属性,并试图找出哪一个是正确的。使其成为必要的选项,必须在嵌入HTML文件中设置图像的路径。如果没有设置,使用合理和充分证明默认:
<script type="text/javascript">
var options = {
'path_to_images': '/static/images/' // defaults to '/js/img/'
};
</script>
,如果您有文件夹:
/webroot
/images
/scripts
然后图像会/images/whatever.jpg的绝对路径和脚本将/scripts/js.js
路径的绝对路径到JS是无关紧要的;即使您从外部JS修改它们,HTML文件中的链接也始终是相对于HTML文件的。
[编辑]如果你需要建立相对于当前网页的路径,你可以找到它的document.location.pathname
路径。这个路径是相对于web根目录的,但你应该能够找到一个已知的子路径,然后从那里开始工作。
例如,对于此页面,它pathname
将是/posts/1858724
。你可以找posts
,然后从那里建立一个相对路径(例如posts/../images/smiley.png
)
这对于JS来说是正确的,但对于CSS来说则是如此。 CSS文件中的链接与CSS文件相关,而不是HTML文件。 – Marius 2009-12-07 08:58:08
这就是要点!再说一遍:我知道图像与JavaScript文件相关的位置。我不知道Javascript是相对于页面的。由于我将插入到页面的路径必须是相对页面,我需要知道JavaScript文件的路径才能创建正确的路径! – SamGoody 2009-12-07 09:21:38
哦,这很简单:您可以在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);
这很酷。不幸的是它只适用于FF。 – Boldewyn 2009-12-07 10:38:14
我知道这个问题被问一段时间回来,但我也有类似的情况,山姆。
在我的情况,我有两个原因的情况:
- 用户可以访问不同的子域,每个都有自己的索引页。
- 用户可以输入一个导致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也是一样。
费解并且不是很有用,但它的另一种方法 - 可能会引发某人更好的想法。
这可以在Jscript中完成吗?或许我应该添加一个小片段来捕捉IE,至少? – SamGoody 2009-12-07 09:54:03
不,我只是提到过,因为您可以在Windows机器上执行JScript文件,并且您可以通过所谓的Windows Script Host访问文件。在IE中也没有运气,对不起。 – Boldewyn 2009-12-07 10:07:03