web-dev-qa-db-fra.com

Comment obtenir une URL de base avec jquery ou javascript?

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.

87
Navin Rauniyar

Celui-ci vous aidera ...

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

Je pense que ça ira pour toi

var base_url = window.location.Origin;

var Host = window.location.Host;

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

Cela va obtenir l'URL de base

var baseurl = window.location.Origin+window.location.pathname;
22
Zaheer Babar

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;
12
Artjom B.
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/

5
AKHIL KUMAR

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.

5
Brian Bolli

le moyen le plus simple d'obtenir l'URL de base dans jQuery

window.location.Origin
3
Qaisar Malik

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

3

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.

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

presque pareil que Jenish, mais un peu plus court.

2
Mateen

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
1
john

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+"://")]
1
Blubbll

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.

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

C'est une question extrêmement ancienne, mais voici les approches que j'utilise personnellement ...

Obtenir l'URL standard/de base

Comme beaucoup l'ont déjà indiqué, cela fonctionne dans la plupart des situations.

var url = window.location.Origin;


Obtenir l'URL de base absolue

Cependant, cette approche simple peut être utilisée pour supprimer les numéros de port.

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


Définir l'URL de base

En prime, l'URL de base peut ensuite être redéfinie globalement.

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

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.

0
Hexodus

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;
    }
0
nuander

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.

0
Peter Rader