如何获得与jquery或javascript的基础url ?

在joomla php中,我可以使用$this->baseurl来获得基本路径,但我想在jquery中获得基本路径。

基本路径可以是以下示例中的任意一个:

http://www.example.com/
http://localhost/example
http://www.example.com/sub/example

example也可能改变。

430613 次浏览

这条会帮助你……

var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];

我认为这对你很有用:

var base_url = window.location.origin;


var host = window.location.host;


var pathArray = window.location.pathname.split( '/' );

这在javascript中是不可能的,因为这是一个服务器端属性。客户端上的Javascript无法知道joomla安装在哪里。最好的选择是以某种方式将$this->baseurl的值包含到页面javascript中,然后使用这个值(phpBaseUrl)。

然后你可以像这样构建url:

var loc = window.location;
var baseUrl = loc.protocol + "//" + loc.hostname + (loc.port? ":"+loc.port : "") + "/" + phpBaseUrl;

我在几个Joomla项目中遇到过这种需求。我发现的最简单的方法是在模板中添加一个隐藏的输入字段:

<input type="hidden" id="baseurl" name="baseurl" value="<?php echo $this->baseurl; ?>" />

当我需要的值在JavaScript:

var baseurl = document.getElementById('baseurl').value;

不像使用纯JavaScript那样花哨,但很简单,可以完成工作。

这将得到base url

var baseurl = window.location.origin+window.location.pathname;

把它放在你的标题中,这样当你需要它的时候就可以使用了。

var base_url = "<?php echo base_url();?>";

你会得到http://localhost:81/your-path-filehttp://localhost/your-path-file

window.location.origin+"/"+window.location.pathname.split('/')[1]+"/"+page+"/"+page+"_list.jsp"

几乎和Jenish的答案一样,但更短一点。

你提到example.com可能会改变,所以我怀疑实际上你需要基本url,只是为了能够为你的脚本使用相对路径符号。在这种特殊情况下,不需要使用脚本-而是添加base标签到你的头:

<head>
<base href="http://www.example.com/">
</head>

我通常通过PHP生成链接。

我建议每个人在开发中创建HTML基础标签,然后动态分配href,所以在生产中,无论客户端使用什么主机,它都会自动适应它:

<html>
<title>Some page title</titile>
<script type="text/javascript">
var head  = document.getElementsByTagName('head')[0];
var base = document.createElement("base");
base.href = window.document.location.origin;
head.appendChild(base);
</script>
</head>
...
所以如果你在localhot:8080中,你将从base中到达每一个链接或引用的文件,例如:http://localhost:8080/some/path/file.html 如果你在www.example.com,它将是http://www.example.com/some/path/file.html

还要注意,你所在的每个位置,都不应该在href中使用像glob这样的引用,例如:父位置导致http://localhost:8080/而不是http://localhost:8080/some/path/

假装你引用所有的超链接作为完整的句子没有bas url。

如果有人想把它分解成一个非常健壮的函数

    function getBaseURL() {
var loc = window.location;
var baseURL = loc.protocol + "//" + loc.hostname;
if (typeof loc.port !== "undefined" && loc.port !== "") baseURL += ":" + loc.port;
// strip leading /
var pathname = loc.pathname;
if (pathname.length > 0 && pathname.substr(0,1) === "/") pathname = pathname.substr(1, pathname.length - 1);
var pathParts = pathname.split("/");
if (pathParts.length > 0) {
for (var i = 0; i < pathParts.length; i++) {
if (pathParts[i] !== "") baseURL += "/" + pathParts[i];
}
}
return baseURL;
}

容易

$('<img src=>')[0].src

生成一个带有空src-name的img会强制浏览器自己计算base-url,不管你是否有/index.html或其他任何东西。

格式为“hostname/pathname/search”

url是:

var url = window.location.hostname + window.location.pathname + window.location.hash

为了你的案子

window.location.hostname = "stackoverflow.com"
window.location.pathname ="/questions/25203124/how-to-get-base-url-with-jquery-or-javascript"
window.location.hash = ""

baseurl = hostname = window。location。hostname

下面是一些同样适用于file:// url的快速方法。

我想出了这样一句话:

[((1!=location.href.split(location.href.split("/").pop())[0].length?location.href.split(location.href.split("/").pop())[0]:(location.protocol,location.protocol+"//" + location.host+"/"))).replace(location.protocol+"//"+location.protocol+"//"+location.protocol+"://")]

我只是在同一个舞台上,这个解决方案对我来说很管用

在视图中

<?php
$document = JFactory::getDocument();


$document->addScriptDeclaration('var base = \''.JURI::base().'\'');
$document->addScript('components/com_name/js/filter.js');
?>

在js文件中,您可以将base作为变量访问,例如在您的场景中:

console.log(base) // will print
// http://www.example.com/
// http://localhost/example
// http://www.example.com/sub/example

我不记得我把这个信息给信用,如果我找到它,我会编辑答案

var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
var getUrl = window.location;
var baseurl = getUrl.origin; //or
var baseurl =  getUrl.origin + '/' +getUrl.pathname.split('/')[1];

但你不能说CodeIgniter(或php joomla)的baseurl()将返回相同的值,因为可以更改这些框架的.htaccess文件中的baseurl。

例如:

如果你在本地主机上有一个。htaccess文件:

RewriteEngine on
RewriteBase /CodeIgniter/
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

$this->baseurl()将返回http://localhost/CodeIgniter/

有同样的问题前一段时间,我的问题是,我只是需要基础url。这里有很多详细的选项,但要解决这个问题,只需使用window.location对象。实际上,在浏览器控制台中输入这个,然后按enter键选择你的选项。对于我的例子,它很简单:

window.location.origin

最简单的方法,以JavaScript获得基础url

window.location.origin
这是一个非常古老的问题,但以下是我个人使用的方法

获取标准/基础URL

正如许多人已经指出的,这适用于大多数情况。

var url = window.location.origin;

< br >

获取绝对基础URL

但是,这种简单的方法可以用来去掉任何端口号。

var url = "http://" + location.host.split(":")[0];

为了解决由杰森大米提出的问题,可以使用以下方法自动插入正确的协议类型…

var url = window.location.protocol + "//" + location.host.split(":")[0];

< br >

设置基础URL

还有一个好处——基URL可以全局重新定义。

document.head.innerHTML = document.head.innerHTML + "<base href='" + url + "' />";

document.baseURI返回包含<base/>标记值的基本URL https://developer.mozilla.org/en-US/docs/Web/API/Node/baseURI < / p >

我很惊讶,如果在<base>标签中设置,没有一个答案考虑基url。当前的所有答案都试图获取主机名或服务器名或地址的第一部分。这是完整的逻辑,它也考虑了<base>标记(它可能指的是另一个域或协议):

function getBaseURL(){
var elem=document.getElementsByTagName("base")[0];
if (typeof(elem) != 'undefined' && elem != null){
return elem.href;
}
return window.location.origin;
}

Jquery格式:

function getBaseURL(){
if ($("base").length){
return $("base").attr("href");
}
return window.location.origin;
}

在不涉及上述逻辑的情况下,同时考虑<base>标记和window.location.origin的简化解决方案:

Js:

var a=document.createElement("a");
a.href=".";
var baseURL= a.href;

Jquery:

var baseURL= $('<a href=".">')[0].href

对于你的计算机(不是主机上)的本地文件最后注意:window.location.origin只返回file://,但上面的排序解决方案返回完整的正确路径。

拆分并加入URL:

const s = 'http://free-proxy.cz/en/abc'
console.log(s.split('/').slice(0,3).join('/'))

这是一个简短的例子:

const base = new URL('/', location.href).href;


console.log(base);

你可以很容易地得到它:

var currentUrl = window.location.href;

或者,如果你想要原始的URL,使用:

var originalUrl = window.location.origin;

获取基本url 从js

调用控制器
function getURL() {


var windowurl = window.location.href;
var baseUrl = windowurl.split('://')[1].split('/')[0]; //split function


var xhr = new XMLHttpRequest();
var url='http://'+baseUrl+'/url from controller';
xhr.open("GET", url);
xhr.send(); //object use to send


xhr.onreadystatechange=function() {
if(xhr.readyState==4 && this.status==200){
//console.log(xhr.responseText); //the response of the request
        

document.getElementById("id from where you called the function").innerHTML = xhr.responseText;
}
}
}

一个更简单的答案在这里,window.location.href = window.location.origin;