我有以下要构建的网址,
http://localhost/myweb/cart/index.php
我想动态获取
http://localhost/myweb/
位构建。
要在我的实时网站 http://www.myweb.com/cart/index.php 上执行此操作,我可以使用以下 JavaScript 代码,
var http = location.protocol;
var slashes = http.concat("//");
var host = slashes.concat(window.location.hostname);
但是,既然我的开发环境有
http://localhost/myweb/
,我该如何让它正常工作呢?如果我运行上面的代码,它只会给我http://localhost/
。
有什么建议吗?
window.location.pathname
是您要搜索的东西。
我建议您阅读 window.location 的 MDN 描述。与 MDN 中的其他内容一样,这也非常简单且信息丰富。
如果您知道 URL 末尾有不必要的 index.html 部分,您可以:
var path = window.location.pathname.split('/');
path.pop();
path.join('/');
或者你可以切片(因为它通常更快):
path.slice(0,path.lastIndexOf('/')+1)
编辑:
看到你的新问题,我可以说,仅通过当前的 URL 无法一致且安全地完成你想要的事情。
您需要
http://localhost/myweb/
部分,它是应用程序的 URL 根。在 javascript 中,您可以获取 url 的协议和域。在您的实时站点上,这两个匹配,但如果您的应用程序驻留在子文件夹中(例如本地主机上的 myweb
文件夹),则此操作将会失败。
您需要以某种方式识别应用程序 URL(应用程序的 URL 根)。
问题在于,仅通过检查 URL,JavaScript 无法判断您的应用程序所在的位置。
假设您将网站部署到:
http://localhost/myweb/site1/
您将拥有以下网址:
http://localhost/myweb/site1/cart/index.php
Javascript 可以用斜杠 (
/
) 分割您的 URL,但它现在无法知道应该选择多少个子文件夹。例如,在上面的 URL 中,您的应用程序根可以是以下任意一个:http://localhost/
、http://localhost/myweb/
、http://localhost/myweb/site1/
、http://localhost/myweb/site1/cart/
。
通过另一种方法(我首先建议的),您可以删除 URL 的末尾(在您的情况下为
cart/index.php
部分)。仅当您的 URL 结构非常严格时,此功能才有效,因此执行此脚本的所有页面都驻留在一个子文件夹中。
因此它将在以下 URL 上中断:
http://localhost/myweb/site1/gallery/old/index.php
或类似的 URL。
您的最好的选择是将其作为一个单独文件中的“配置变量”,您可以在部署到的每个位置上对其进行编辑。
作为 PHP 变量 (
$appRoot = "http://localhost/myweb/"
),您可以使用它生成 javascript。
或者更简单地说是一个 JavaScript 变量 (
var appRoot = 'http://localhost/myweb/'
)。创建一个单独的 js 文件,将其命名为 config.js
,将上面的行添加到其中并在其他 javascript 之前引用它。