Temel URL'yi jquery veya javascript ile nasıl edinebilirim?


152

Joomla php orada $this->baseurltemel yol almak için kullanabilirsiniz , ama jquery temel yol almak istedim.

Temel yol aşağıdaki örneklerden herhangi biri olabilir:

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

exampleAyrıca değişebilir.



@Mritunjay Ben zaten gördüm, ama benim durumumda baz yolu farklı olarak ben php gibi joomla yapmak gibi baz yolu almak
istedim

Peki, cevapların hiçbiri sorununuzu çözmedi mi?
Artjom B.Ağustos

bir cevap seç lütfen?
allanberry

Yanıtlar:


177

Bu size yardımcı olacak ...

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

Evet çalışıyor! http://localhost/myapp/what/ever/sub/folder-> getBaseUrl -> http://localhost/myapp:-)
vee

3
@Artjom B tarafından bir şekilde kontrol edilemeyen bir yanıtla belirtildiği gibi bu, tüm durumlarda çalışmaz. Örneğin, bir site yerel ağ üzerinden test edildiğinde (ve alan adı IP + yerel yolla değiştirildiğinde), temel URL aşağıdaki gibi olabilir: 192.168.0.23/~sites/site/html/yerine site.dev. Bir sitenin herhangi bir sayıda sanal alt dizini olabileceğinden, tam yol adını Javascript ile almak da bir seçenek değildir.
certainlyakey

124

Bence senin için iyi olacak

var base_url = window.location.origin;

var host = window.location.host;

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

7
Güzel kısa ve tatlı, teşekkürler. window.location.origin
TetraDev

1
kısa, öz ve iyi çalıştığı için bu tercih edilen cevap olmalıdır.
Gregor

window.location.origin ie9
jnoreiga

1
@jnoreiga Hala ie9 Who kullananlar
Alexandre Daubricourt

2
Keşke o basit olsaydı @AlexandreDaubricourt
jnoreiga

30

Bu, temel URL'yi alacak

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

Bu window.location.href ile aynıdır
Z. Khullah

8
aynı değildir, pathname size
url'nin

24

Bu çok eski bir soru, ama burada şahsen kullandığım yaklaşımlar ...

Standart / Temel URL'yi edinin

Birçok kişinin belirttiği gibi, bu çoğu durum için geçerlidir.

var url = window.location.origin;


Mutlak Temel URL'yi Alın

Bununla birlikte, bu basit yaklaşım, herhangi bir port numarasını çıkarmak için kullanılabilir.

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

Düzenleme: Jason Rice tarafından poz endişe gidermek için , aşağıdaki otomatik olarak doğru protokol türü eklemek için kullanılabilir ...

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


Temel URL'yi ayarla

Bonus olarak - temel URL daha sonra global olarak yeniden tanımlanabilir.

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

1
Protokolünüz http dışında https gibi bir şey olmadığı sürece (o zaman url protokolünü "http: //" olarak ayarlamak, url'yi nasıl kullanmak istediğinize bağlı olarak bazı gerçekten garip hatalar sunacaktır).
Jason Rice

13

Bu bir sunucu tarafı özelliği olduğundan, bu javascript mümkün değildir. İstemcideki Javascript, joomla'nın nerede kurulu olduğunu bilemez. En iyi seçenek, bir şekilde $this->baseurlsayfanın javascript'in değerini dahil etmek ve ardından bu değeri ( phpBaseUrl) kullanmaktır.

Daha sonra URL'yi şu şekilde oluşturabilirsiniz:

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

1
Not loc.hostgibi bir url için, limana sahiptir http://localhost:8082/bu yöntemle üretecek http://localhost:8082:8082/, window.location.hostnamebunun yerine kullanılmalıdır.
Tiberiu C.

@TiberiuC. Teşekkürler, eklendi.
Artjom B.


9

Bir süre önce aynı sorunu vardı, benim sorunum, sadece temel url gerekiyordu. Burada birçok ayrıntılı seçenek var, ancak bunun üstesinden gelmek için window.locationnesneyi kullanın . Aslında bunu tarayıcı konsoluna yazın ve seçeneklerinizi seçmek için enter tuşuna basın. Benim durumum için basitçe:

window.location.origin

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

Ancak CodeIgniter'ın (veya php joomla) baseurl () işlevinin aynı değeri döndüreceğini söyleyemezsiniz, çünkü bu çerçevelerin .htaccess dosyasındaki baseurl değerini değiştirmek mümkündür.

Örneğin :

Yerel ana bilgisayarınızda böyle bir .htaccess dosyanız varsa:

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 () işlevi http: // localhost / CodeIgniter /


6

Birkaç Joomla projesinde bu ihtiyaçla karşılaştım. Adres bulmanın en basit yolu, şablonuma gizli bir giriş alanı eklemektir:

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

JavaScript'te değere ihtiyacım olduğunda:

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

Saf JavaScript kullanmak kadar süslü değil, basit ve işi hallediyor.


6

jQuery'de temel url almanın en kolay yolu

window.location.origin

Bu aslında jQuery değil. jQuery şuna benzer: $ (location) .attr ("origin");
Mauritz Hansen

3

Herkesin geliştirme sırasında HTML temel etiketi oluşturmasını, ardından href'i dinamik olarak atamasını öneriyorum, bu nedenle bir müşterinin kullandığı ana makine üretiminde, otomatik olarak buna eklenir:

<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>
 ...

Eğer localhot: 8080'de iseniz, tabandan her bağlantılı veya başvurulan dosyaya ulaşacaksınız, örneğin: http://localhost:8080/some/path/file.html www.example.com'daysanız,http://www.example.com/some/path/file.html

Ayrıca, bulunduğunuz her yerde hrefs'de globs gibi referanslar kullanmamanız gerektiğini unutmayın, örneğin: Ana konum neden http://localhost:8080/olmamalıdır http://localhost:8080/some/path/.

Tüm köprülere bas url'siz tam cümle olarak başvurduğunuzu varsayalım.


3

Biçim hostname / pathname / search şeklindedir

Yani URL:

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

Davan için

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

Temel olarak baseurl = hostname = window.location.hostname


3

<base>Etikette ayarlanmışsa, cevapların olmayanlarının temel URL'yi dikkate alması beni şaşırttı . Geçerli yanıtların tümü ana bilgisayar adını veya sunucu adını veya adresin ilk bölümünü almaya çalışır. <base>Etiketi de dikkate alan tam mantık budur (başka bir alan veya protokole atıfta bulunabilir):

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

Jquery biçimi:

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

Yukarıdaki mantığa katılmadan, hem <base>etiketi hem de aşağıdakileri dikkate alan steno çözümü window.location.origin:

js:

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

jQuery:

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

Son not: Bilgisayarınızdaki yerel bir dosya için (ana bilgisayarda değil) window.location.originyalnızca geri gelen, file://ancak yukarıdaki ayırma çözümü tam doğru yolu döndürür.


1
Bu en iyi yol değil. Ayrıca, @ DaniilSamoylov'un <base>unsuru içeren cevabına bakınız .
Brad

baseURI, bir düğümün temel URL'sini döndürür, bu durumda temel yol + belge adını döndürür. bu URL'den doküman adını kaldırmak için daha fazla koda ihtiyacınız olacaktır. Bra
Ali Sheikhpour

Bu çözüm yok değil web sayfasının kök dizini bir alt dizinine (örneğin dahilinde olduğunda doğru temel URL'sini geri vermek example.com/appRoot ). Yalnızca web sayfasının kök dizini doğrudan web barındırıcısının kökünde olduğunda çalışır.
Michael Hafner

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

neredeyse Jenish yanıtı ile aynı ama biraz daha kısa.


2

Ben sadece aynı sahnedeydim ve bu çözüm benim için çalışıyor

Görünümde

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

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

Js dosyasında baseörneğin senaryonuzda bir değişken olarak erişirsiniz :

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

Kredi vermek için bu bilgiyi nereden aldığımı hatırlamıyorum, bulursam cevabı düzenleyeceğim


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

1
Lütfen cevabınıza bir açıklama eklemeyi düşünün.
Oğlak

1

İşte file://URL'lerle de çalışan hızlı bir şey .

Bu tek astarı buldum:

[((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+"://")]

0

example.comDeğişebilir bahsettik, bu yüzden sadece komut dosyalarınız için göreli yol gösterimini kullanabilmek için temel url'ye ihtiyacınız olduğundan şüpheleniyorum. Bu özel durumda komut dosyası kullanmaya gerek yoktur; bunun yerine temel etiketi başlığınıza ekleyin:

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

Genellikle PHP ile bağlantı oluştururum.


0

Herkesin bunu çok sağlam bir fonksiyona bölmesini görmek isterse

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

Bu sadece tüm url'yi verir. Temel URL değil.
Sam,

Gerçekten, bununla nereye gittiğime emin değilim. Uzun zamandır sunucu tarafı kodla ayarlamaya
geçtim

0

Kolay

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

Boş src-adıyla bir img üretir, tarayıcınız varsa /index.htmlveya başka bir şey olursa olsun, temel URL'yi kendi başına hesaplamaya zorlar .


Bu, en zarif çözüm ve tarayıcı mantığını çoğaltmayan tek çözüm gibi görünüyor, ki bu güzel. Ne kadar taşınabilir olduğunu merak ediyorum. HTML özelliklerinde bunun tüm tarayıcılarda çalışacağı garanti edilen bir şey var mı?
Matthijs Kooijman

@MatthijsKooijman HTML özelliklerinin yorumlanmasına bağlıdır. 0 uzunluğundaki bir dosya adı geçerli bir kaynak adıdır ... tüm tarayıcılarla eşleşir.
Grim

Tarayıcıların nasıl yapıldığını anlayın. Birkaç programcınız var, (dolaylı) bir tarayıcı oluşturmak istiyor. İlk kaynakları html-specs. Teknik özellikleri okuyorlar ve bu gerçekten çözmek istedikleri sorulardan biri. Onların (hepsi) bu koşullara nasıl karar verdiklerini düşünüyorsunuz?
Grim

-2

URL'yi bölün ve katılın:

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

-4

Bunu başlığınıza koyun, böylece ihtiyacınız olduğunda kullanılabilir olacak.

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

Sen alacaksın http://localhost:81/your-path-fileya http://localhost/your-path-file.

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.