相对于文件的Javascript路径



我写了一个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文件本身的路径?

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

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


然而,因为你正在调用PHP脚本-这显然不属于JS文件夹-你的问题应该不是一个问题。AJAX调用将相对于包含脚本的文档,并且您可能知道从该文档到PHP脚本的路径。

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

您可以通过检查当前文档中<script>标签上的src属性来找到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;
    }
});

获取绝对路径是不可能的,原因有两个:

  • JS在客户端运行
  • JS路径总是相对于:
    • HTML页面(scripts.js in xyz.com/test/index.php => xyz.com/test/scripts.js)
    • 服务器文件根目录(/scripts.js in 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>

最新更新