相对于文件的Javascript路径

时间:2011-04-18 07:09:15

标签: javascript path relative-path absolute-path

我编写了一个Web应用程序,其中JS文件对其他文件进行了大量相对调用。这已经达到了这一点,但现在我正在使用来自不同目录中的页面的这个js文件,并且我遇到路径错误。这个Web应用程序将安装在许多不同的主机上,因此我不知道绝对路径是否可行,因为我不知道它的安装位置。我也不想在我的路径中使用大量前置变量来破坏js(但可能必须)。

我想让js路径相对于js文件本身而不是打开它的文件...有没有办法在js文件中设置默认的根目录?

$.ajax({
    type: "POST",
    url: "inc/alert.php",
    success: function(msg){
        if(msg){
            window.location.href = 'inc/logoff.php?timeout=true';
         }
    }
});

这是我的文件结构,但我不知道它将在何处安装或将调用webapp文件夹:

/random-folder/web-app/inc/script.js

到目前为止,我使用js的所有文件都在“web-app”文件夹中...但是现在我有其他页面在不同的文件夹中调用它并且所有路径都被破坏了。有没有办法做到这一点?或者至少有一种方法获取js文件本身的路径

提前感谢您的帮助......

3 个答案:

答案 0 :(得分:4)

不幸的是,这不容易实现。

但是,您可以尝试在HTML文档中查找<script>标记并解析其位置。与location.href一起,您可以构建脚本的绝对URL。


但是,由于您正在调用PHP脚本 - 显然不属于JS文件夹 - 您的问题根本不应成为问题。您的AJAX调用将与包含脚本的文档相关,您可能知道该文档中PHP脚本的路径。

更新:只需阅读来自不同文件夹的文件正在使用这些脚本。在这种情况下,如果您不想简单地手动设置包含路径的var,那么脚本标记解析技术实际上就是这样。

答案 1 :(得分:0)

您可以通过查看当前文档中src标记的<script>属性来找到JS文件的路径。

HTML:

<script src="/some/random/path/main.js"></script>

jQuery的:

var scriptFilename = 'main.js';
var rootPath = ''; // Will contain the path to your file

$('script').each(function() {
    var $script = $(this);

    if ($script.attr('src') && $script.attr('src').indexOf(scriptFilename) > -1) {
        rootPath = $script.attr('src').split(scriptFilename)[0];

        return false;
    }
});

答案 2 :(得分:-1)

由于两个原因,无法获得绝对路径:

  • JS在客户端运行
  • JS路径始终相对于:
    • HTML页面(scripts.js中的xyz.com/test/index.php =&gt; xyz.com/test/scripts.js
    • 服务器文档根(/scripts.js =&gt; xyz.com/test/index.php中的xyz.com/scripts.js

作为解决方案,您可能希望:

  • 从PHP加载JS,例如:<script type="text/javascript" src="scripts.php"></script>
  • 或者,在加载脚本文件之前,加载与选项1相同的配置文件,例如: <script type="text/javascript" src="config.php"></script><script type="text/javascript" src="scripts.js"></script>