parametre - récupérer paramètre url javascript



Comment obtenir l'URL de base d'une application MVC en utilisant javascript (5)

Essayez le code ci-dessous.

function getBaseURL() {
    var url = location.href;  // entire url including querystring - also: window.location.href;
    var baseURL = url.substring(0, url.indexOf('/', 14));


    if (baseURL.indexOf('http://localhost') != -1) {
        // Base Url for localhost
        var url = location.href;  // window.location.href;
        var pathname = location.pathname;  // window.location.pathname;
        var index1 = url.indexOf(pathname);
        var index2 = url.indexOf("/", index1 + 1);
        var baseLocalUrl = url.substr(0, index2);

        return baseLocalUrl + "/";
    }
    else {
        // Root Url for domain name
        return baseURL + "/";
    }

}



document.write(getBaseURL());

Merci,

Siva

Comment puis-je obtenir l'URL de base en utilisant javascript?

Par exemple, lorsque je navigue sur mon site depuis Visual Studio et que mon URL est http://localhost:20201/home/index , je voudrais obtenir http://localhost:20201

Si j'héberge mon site sur IIS et si mon nom de répertoire virtuel est MyApp et que l'URL est http://localhost/MyApp/home/index , je souhaite obtenir http://localhost/MyApp

J'ai essayé d'utiliser location.protocol + location.hostname (et location.host ), ils fonctionnent bien lorsque je navigue sur mon site via Visual Studio, mais quand je l'héberge sur IIS, j'obtiens http://localhost , le / MyApp est tronqué de.


Answer #1

Je ne pense pas que cela soit possible car JavaScript (le client) ne sait rien de votre déploiement (MyApp) et le traite comme faisant partie de l’information path (tout comme / home / index). Pour contourner ce problème, vous pouvez essayer d'interpréter le chemininfo (location.pathname) en fonction du domaine ou du port.

Mais vous pouvez définir une variable JavaScript dans une portée globale (ou ce qui vous convient) contenant le chemin (le chemin est généré par le serveur et placé dans la variable).

Cela pourrait ressembler à ça dans votre fichier HTML-Head:

<script type="text/javascript">
    var global_baseurl = '<insert server side code that gets the path depending on your server side programming language>';
</script>

Answer #2

Vous devez éviter de faire une telle détection dans JavaScript et transmettre la valeur à partir du code .NET. Vous risquez toujours de rencontrer des problèmes avec des URL telles que http://server/MyApp/MyApp/action où vous ne pouvez pas savoir quel est le nom d'un contrôleur et le chemin d'accès à l'application.

Dans votre fichier Layout.cshtml (ou partout où vous en avez besoin), ajoutez le code suivant:

<script type="text/javascript">
    window.applicationBaseUrl = @Html.Raw(HttpUtility.JavaScriptStringEncode(Url.Content("~/"), true));
    alert(window.applicationBaseUrl + "asd.html");

    // if you need to include host and port in the url, use this:
    window.applicationBaseUrl = @Html.Raw(HttpUtility.JavaScriptStringEncode(
        new Uri(
                   new Uri(this.Context.Request.Url.GetLeftPart(UriPartial.Authority)),
                   Url.Content("~/")
               ).ToString(), true));
    alert(window.applicationBaseUrl + "asd.html");
</script>

La new Uri() est nécessaire pour que l'URL soit toujours combinée correctement (sans vérifier manuellement si chaque partie commence ou se termine par / symbol).


Answer #3

Vous pouvez définir une URL de base dans la balise head de votre page. Tous les liens / hrefs l'utiliseront pour appeler des hrefs relatieve.

@{ var baseHref = new System.UriBuilder(Request.Url.AbsoluteUri) { Path = Url.Content("~/") }; }
<base href="@baseHref" />

Explication:

  • Url.Content ("~ /") renvoie le chemin relatif (dans ce cas, MyApp sur le serveur)
  • new System.UriBuilder (Request.Url.AbsoluteUri) crée un UriBuilder contenant des informations de port et de protocole

Answer #4
var url = window.location.href.split('/');
var baseUrl = url[0] + '//' + url[2];




iis