我有跟随url构建,
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/
。
有什么建议吗?
答案 0 :(得分:3)
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)
修改强>:
看到你的新问题我可以说,只有当前的网址无法一致,安全地完成你想要的工作。
您需要http://localhost/myweb/
部分,这是您的应用程序的URL根目录。在javascript中,您可以获得URL的协议和域。在您的实际站点上这两个匹配,但如果您的应用程序驻留在子文件夹(如本地主机的myweb
文件夹)中,则会失败。
您需要的是以某种方式识别应用程序URL(应用程序的URL根目录)。
问题在于,仅通过检查URL,javascript无法分辨您的应用程序所在的位置。
假设您将网站部署到:http://localhost/myweb/site1/
您将拥有以下网址:http://localhost/myweb/site1/cart/index.php
Javascript可以通过斜杠(/
)拆分您的网址,但它无法确定应该选择多少个子文件夹。例如,应用程序根目录上方的URL可以是以下任何一种:http://localhost/
,http://localhost/myweb/
,http://localhost/myweb/site1/
,http://localhost/myweb/site1/cart/
。
通过其他方法(我先建议),您可以删除URL的末尾(在您的情况下是cart/index.php
部分)。这只有在您的URL结构非常严格时才有效,因此执行此脚本的所有页面都驻留在一个子文件夹中。
因此它将在以下网址上展开:http://localhost/myweb/site1/gallery/old/index.php
或类似网址。
最佳选择是将其设置为单独文件中的“配置变量”,您可以在其部署的每个位置进行编辑。
作为PHP变量($appRoot = "http://localhost/myweb/"
)生成javascript with。
或者更简单的是一个javascript变量(var appRoot = 'http://localhost/myweb/'
)。创建一个单独的js文件,称之为config.js
,将上面的行添加到它并在其他javascripts之前引用它。