JavaScript'te bir URL'nin ana bilgisayar adı kısmı nasıl çıkarılır


379

Tam bir URL'den başlamanın gerçekten kolay bir yolu var mı:

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

Ve sadece ana kısmı çıkarın:

aaa.bbb.ccc.com

Bunu güvenilir bir şekilde yapan bir JavaScript işlevi olmalı, ancak bulamıyorum.

Yanıtlar:


827

Bu adresle bir sayfanız olduğunu varsayalım: http://sub.domain.com/virtualPath/page.htm. bu sonuçları elde etmek için aşağıdakileri sayfa kodunda kullanın:

  • window.location.host: alacaksın sub.domain.com:8080veyasub.domain.com:80
  • window.location.hostname : alacaksınız sub.domain.com
  • window.location.protocol : alacaksınız http:
  • window.location.port: alacaksın 8080veya80
  • window.location.pathname : alacaksınız /virtualPath
  • window.location.origin: http://sub.domain.com***** alacaksın

Güncelleme: .origin hakkında

***** Referansta belirtildiği gibi, tarayıcı uyumluluğu window.location.originaçık değildir. Krom içinde kontrol ettik http://sub.domain.com:portve bağlantı noktası 80 dışında bir şey varsa ve bağlantı noktası 80 ise döndü http://sub.domain.com.

@Torazaburo'ya bunu söylediğin için özel teşekkürler.


IIS'de bir web sitem ve 2 uygulamam var. Örneğin: sub.domain.com/v1 ve sub.domain.com/v2 ve sub.domain.com/v1/Default.aspx veya sub.domain.com/v2/Products/Default.aspx gibi sayfalar . Nasıl I sub.domain.com/v2 uygulamamın kökü olan değer / v2'yi alabilir miyim ?
Kiquenet

@Kiquenet WebStorm gibi bir javascript IDE kullanın, kod yazarken olası seçenekleri göreceksiniz.
Bhargav Nanekalva

3
window.location.originIE9'da tanımlanmamıştır (bağlantıya göre IE11 +). Bu cevap yardımcı oldu.
Neolisk

1
Açıkçası, hemen hemen herkes için yararlıdır, ancak ana kısmı URL'den nasıl çıkaracağınız sorusunu yanıtlamaz. Komik getRootUrl fonksiyonu ile doğru cevap sadece 17 vs 609 oy var.
Miro

@Miro soru cevaplandı değil mi, 2. madde işareti şu soruya cevap veriyor: window.location.hostname: sub.domain.com
Paul

155

Konum protokolünü ve ana bilgisayarı birleştirebilirsiniz:

var root = location.protocol + '//' + location.host;

Bir url için, diyelim ki 'http://stackoverflow.com/questions'geri dönecek'http://stackoverflow.com'


5
yukarıdaki sonuçları elde etmek için "host" yerine "hostname" kullanmanız gerektiği anlaşılıyor. Kaynak: stackoverflow.com/questions/6725890/…
user417669 10:13

Location.origin'i aynı sonuçla kullanabilirsiniz.
Sérgio

1
Orijinal soru URL'nin protokol bölümünü sormadı.
Simon East

36

document.locationNesne ve onun hostveya hostnameözelliklerini kullanın .

alert(document.location.hostname); // alerts "stackoverflow.com"

29

Kabul edilen cevap benim için işe yaramadı çünkü sadece geçerli sayfa URL'siyle değil, herhangi bir arbitary url'siyle çalışmak istedim.

URLNesneye bir göz atın :

var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol;  // "http:"
url.hostname;  // "aaa.bbb.ccc.com"
url.pathname;  // "/asdf/asdf/sadf.aspx"
url.search;    // "?blah"

1
Teşekkür ederim. Saatlerce api'den aldığım url'yi ayıklamak için bir yöntem arıyordum. Çok basitti. Sadece yeni URL ile url'de okumuştum. Teşekkür ederim.
Nodirabegimxonoyim

1
+99999999999999
ADJenks

Burada şeylerin tarayıcı tarafında olduğunu varsaymıyorum iki cevap biri ...
Will59

IE11 üzerinde çalışmıyor :(
Teoman shipahi

24

İki yol var. Birincisi, burada başka bir cevabın bir çeşididir, ancak bu, varsayılan olmayan bağlantı noktalarını açıklar:

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

Ama bu daha basit yöntemi (herhangi bir URI dizesi ile çalışır) tercih ederim:

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}

3
Teşekkür ederim! Ben de 2. yöntemi daha iyi gibi! özellikle sunucu tarafında javascript, window.location almak için bir yol yok :)
trillions

Burada, şeylerin tarayıcı tarafında olduğunuzu düşünmeyen iki cevaptan biri ... Ancak, yeni URL kullanarak Martin Konecny'den daha yeni olanı kontrol edin.
Will59



3

Kullandığım ve herhangi bir StackOverflow yanıtında hiç görmediğim başka bir saldırı var: bir görüntünün "src" özniteliğini kullanmak sitenizin tam temel yolunu verecektir. Örneğin :

var dummy = new Image;
dummy.src = '$';                  // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'

Gibi bir URL'de http://domain.com/somesite/index.html, rootolarak ayarlanır http://domain.com/somesite/. Bu ayrıca localhost veya geçerli herhangi bir temel URL için de geçerlidir.

Bunun, sunucuda başarısız bir HTTP isteğine neden olacağını unutmayın. $ sahte görüntüde . Bunu önlemek için varolan bir görüntüyü yalnızca küçük kod değişiklikleriyle kullanabilirsiniz.

Başka bir varyant HTTP istekleri üzerinde yan etkisi olmayan sahte bir bağlantı kullanır:

var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;

Yine de her tarayıcıda test etmedim.


3

Şuna göz at:

alert(window.location.hostname);

bu, ana bilgisayar adını şu şekilde döndürecektir: www.domain.com

ve:

window.location.host

gibi bir port ile alan adı döndürecek www.example.com:80

Tam referans için Mozilla geliştirici sitesini kontrol edin .


2

Bir şey belirtmek istiyorum. Birisi ihtiyacım gibi yolu ile tüm url almak istiyorsanız, kullanabilirsiniz:

var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;

neden daha uzağa gidiyor. Var fullUrl = window.location.origin + window.location.pathname ile elde edilebilir
Anant

ancak bazen protokol ve ana makine adı arasında alt alan gibi bir şey eklemek istersiniz, örneğin çok dilli vb.
crx4

2

Bunun biraz geç olduğunu biliyorum, ama biraz ES6 sözdizimi ile temiz küçük bir işlev yaptım

function getHost(href){
  return Object.assign(document.createElement('a'), { href }).host;
}

Ayrıca ES5'te de yazılabilir

function getHost(href){
  return Object.assign(document.createElement('a'), { href: href }).host;
}

Tabii ki IE desteklemiyor Object.assign, ama benim işimde bu önemli değil.


1

Regex çok daha fazla esneklik sağlar.

    //document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
    //1.
     var r = new RegExp(/http:\/\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com

    //2. 
     var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.