相对于文件的Javascript路径

3
我编写了一个 Web 应用程序,其中 JS 文件有许多相对调用其他文件的路径。到目前为止,这已经可以工作了,但现在我要从不同目录的页面中使用此 JS 文件,并且路径出现错误。这个 Web 应用程序将安装在许多不同的主机上,因此我不知道绝对路径是否有效,因为我不知道它安装在哪里。我也不想在我的路径中添加很多前置变量(但可能不得不这样做)。
我希望 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个回答

4
很遗憾,这不太容易实现。但是,您可以尝试在HTML文档中找到<script>标签并解析其位置。结合location.href,您可以构建一个脚本的绝对URL。
然而,由于您正在调用PHP脚本,这些脚本显然不属于JS文件夹,所以您的问题根本不应该成为问题。您的AJAX调用将相对于包含脚本的文档,并且您可能已经知道从该文档到您的PHP脚本的路径。
更新:刚刚读到来自不同文件夹的文件正在使用这些脚本。在这种情况下,如果您不想仅手动设置包含路径的变量,则解析脚本标记技术实际上是正确的方法。

0
你可以通过检查当前文档中 <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;
    }
});

-1

有两个原因导致无法获取绝对路径:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接