如何获取javascript的绝对路径?
Posted
技术标签:
【中文标题】如何获取javascript的绝对路径?【英文标题】:How to get absolute path of a javascript? 【发布时间】:2019-08-31 22:48:48 【问题描述】:我正在尝试查找我的 javascript 文件的绝对路径(不是 URL)。我更喜欢使用相对路径,而不是硬编码绝对路径。例如:
/static/js/index.js
/static/config/1.json
/static/config/2.json
如果我能得到index.js
的绝对路径,那么我只需要../config/
就可以访问这两个json文件中的任何一个。
搜索 SO 和互联网时,我会得到有关查找 URL 的建议,这些建议有效但不能解决我的问题。或者对于文件路径,使用windows.location.pathname
,但我尝试的任何排列要么返回空字符串,要么返回/
。
var currentDirectory = window.location.pathname.split('/').slice(0, -1).join('/');
console.log("Curr dir: " + currentDirectory);
(返回空字符串)
var location = window.location.pathname;
var directoryPath = location.substring(0, location.lastIndexOf("/")+1);
console.log(" dirPath: " + directoryPath);
(返回/
)
我希望是这样的:
var absolute_path = window.function.absolute.path()
会返回说:/u/user/develop/project/server/static/js/index.js
从中我可以:(再次伪代码)
var locations = absolute_path.split("js");
# location[0] = "/u/user/develop/project/server/static"
# location[1] = "js/index.js"
var config_file_locations = locations[0] + "config/";
var absolute_path_json1 = config_file_locations + "1.json"
-- 编辑--
好的,看看window.location
,它返回的 URL 如此清晰,这不是这里的答案。
【问题讨论】:
忘了补充,我想知道这是否根本不可能,因为它会违反安全模型。此代码将在本地网络上的龙卷风服务器上运行。它永远不会暴露在互联网上。此外,正如您所知,Javascript 不是我的强项。 你在开玩笑吗?您希望浏览器让您知道服务器上的文件是什么?它通常不是一个文件,它只是内存中的一些东西。 URL 是您必须在浏览器中使用的全部内容。 以python为例,os.path.abspath()
返回绝对路径。但听起来 index.js 不知道它从哪个路径/文件夹运行?
python 不能在浏览器上运行;浏览器的 JS 引擎不提供对它自己的文件系统或(显然)服务器文件系统的访问
没错,我只是用它作为例子。我不确定javascript是否存在类似的东西。但根据@quentin 的回答,我认为我所追求的实际上是不可能的。
【参考方案1】:
/static/js/index.js
是绝对路径。您可以判断,因为它以 /
开头,这会将其带回网站的根目录。
浏览器没有自动的方式来告诉任何关于网络服务器如何确定它如何为给定 URL 生成内容的方式。
浏览器所知道的只是它向服务器请求/static/js/index.js
,而服务器以一些 JavaScript 响应。
服务器可能读取了一个静态文件,该文件可能位于名为 js
的目录中,该目录可能是名为 static
的目录的子目录……但随后服务器可能已经获取了整个 URL,在数据库查询中使用它,并从数据库中提取结果……或者它可能已经将请求代理到另一个大陆另一台计算机上的另一个 HTTP 服务器。
如果你想让你的客户端 JS 知道任何关于 HTTP 服务器上文件系统结构的信息,那么你需要以某种方式向它提供这些信息。它无法从浏览器中获取。
【讨论】:
以上是关于如何获取javascript的绝对路径?的主要内容,如果未能解决你的问题,请参考以下文章