Dans joomla php, je peux utiliser $this->baseurl
pour obtenir le chemin de base, mais je voulais obtenir le chemin de base dans jquery.
Le chemin de base peut être l'un des exemples suivants:
http://www.example.com/
http://localhost/example
http://www.example.com/sub/example
La example
peut également changer.
Celui-ci vous aidera ...
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.Host + "/" + getUrl.pathname.split('/')[1];
Je pense que ça ira pour toi
var base_url = window.location.Origin;
var Host = window.location.Host;
var pathArray = window.location.pathname.split( '/' );
Cela va obtenir l'URL de base
var baseurl = window.location.Origin+window.location.pathname;
Cela n'est pas possible à partir de javascript, car il s'agit d'une propriété côté serveur. Javascript sur le client ne peut pas savoir où joomla est installé. La meilleure option consiste à inclure la valeur de $this->baseurl
dans la page javascript, puis à utiliser cette valeur (phpBaseUrl
).
Vous pouvez ensuite construire l'URL comme ceci:
var loc = window.location;
var baseUrl = loc.protocol + "//" + loc.hostname + (loc.port? ":"+loc.port : "") + "/" + phpBaseUrl;
var getUrl = window.location;
var baseurl = getUrl.Origin; //or
var baseurl = getUrl.Origin + '/' +getUrl.pathname.split('/')[1];
Mais vous ne pouvez pas dire que le baseurl () de CodeIgniter (ou php joomla) retournera la même valeur, car il est possible de changer le baseurl dans le fichier .htaccess de ces frameworks.
Par exemple :
Si vous avez un fichier .htaccess comme celui-ci dans votre localhost:
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]
Le $ this-> baseurl () retournera http: // localhost/CodeIgniter/
J'ai rencontré ce besoin sur plusieurs projets Joomla. Le moyen le plus simple que j'ai trouvé de résoudre consiste à ajouter un champ de saisie masqué à mon modèle:
<input type="hidden" id="baseurl" name="baseurl" value="<?php echo $this->baseurl; ?>" />
Quand j'ai besoin de la valeur en JavaScript:
var baseurl = document.getElementById('baseurl').value;
Pas aussi sophistiqué que d'utiliser du JavaScript pur mais simple et fait le travail.
le moyen le plus simple d'obtenir l'URL de base dans jQuery
window.location.Origin
Le format est nomhôte/chemin/recherche
Donc l'URL est:
var url = window.location.hostname + window.location.pathname + window.location.hash
Pour votre cas
window.location.hostname = "stackoverflow.com"
window.location.pathname ="/questions/25203124/how-to-get-base-url-with-jquery-or-javascript"
window.location.hash = ""
Donc, fondamentalement, le baseurl = hostname = window.location.hostname
Je recommanderais à tout le monde de créer une balise de base HTML en développement, puis d'affecter le href de manière dynamique. Ainsi, en production, quel que soit l'hôte utilisé par un client, il y sera automatiquement adapté:
<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>
...
Donc, si vous êtes dans localhot: 8080, vous atteindrez chaque fichier lié ou référencé depuis la base, par exemple: http://localhost:8080/some/path/file.html
Si vous êtes dans www.example.com, ce sera http://www.example.com/some/path/file.html
.
Notez également que, à chaque emplacement sur lequel vous vous trouvez, vous ne devez pas utiliser de références telles que globs dans hrefs, par exemple: L'emplacement parent provoque http://localhost:8080/
et non http://localhost:8080/some/path/
.
Imaginez que tous les liens hypertexte soient référencés comme condamnés à part entière sans l’URL de base.
window.location.Origin+"/"+window.location.pathname.split('/')[1]+"/"+page+"/"+page+"_list.jsp"
presque pareil que Jenish, mais un peu plus court.
Si j'avais eu le même problème il y a quelque temps, mon problème était que j'avais simplement besoin de l'URL de base. Il y a beaucoup d'options détaillées ici, mais pour contourner ce problème, utilisez simplement l'objet window.location
.En fait, tapez ceci dans la console du navigateur et appuyez sur Entrée pour sélectionner vos options. Eh bien pour mon cas c'était simplement:
window.location.Origin
Voici quelque chose de rapide qui fonctionne également avec les URL file://
.
Je suis venu avec ce one-liner:
[((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+"://")]
J'étais juste sur la même scène et cette solution fonctionne pour moi
Dans la vue
<?php
$document = JFactory::getDocument();
$document->addScriptDeclaration('var base = \''.JURI::base().'\'');
$document->addScript('components/com_name/js/filter.js');
?>
Dans le fichier js, vous accédez à base
en tant que variable, par exemple, dans votre scénario:
console.log(base) // will print
// http://www.example.com/
// http://localhost/example
// http://www.example.com/sub/example
Je ne me souviens pas où je prends cette information pour donner crédit, si je la trouve, je modifierai la réponse.
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.Host + "/" + getUrl.pathname.split('/')[1];
C'est une question extrêmement ancienne, mais voici les approches que j'utilise personnellement ...
Comme beaucoup l'ont déjà indiqué, cela fonctionne dans la plupart des situations.
var url = window.location.Origin;
Cependant, cette approche simple peut être utilisée pour supprimer les numéros de port.
var url = "http://" + location.Host.split(":")[0];
En prime, l'URL de base peut ensuite être redéfinie globalement.
document.head.innerHTML = document.head.innerHTML + "<base href='" + url + "' />";
Vous avez mentionné que le example.com
est susceptible de changer. Je suppose donc que vous avez besoin de l'URL de base uniquement pour pouvoir utiliser la notation de chemin relatif pour vos scripts. Dans ce cas particulier, il n'est pas nécessaire d'utiliser un script - ajoutez plutôt la balise de base à votre en-tête:
<head>
<base href="http://www.example.com/">
</head>
Je génère généralement le lien via PHP.
Au cas où quelqu'un voudrait voir cela se transformer en une fonction très robuste
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;
}
Facile
$('<img src=>')[0].src
Génère un img avec src-name vide oblige le navigateur à calculer l'URL de base par lui-même, peu importe si vous avez /index.html
ou autre chose.