Jquery या जावास्क्रिप्ट के साथ बेस url कैसे प्राप्त करें?


152

जूमला php में मैं वहाँ का उपयोग कर सकते हैं $this->baseurl बेस पाथ प्राप्त करने के लिए , लेकिन मैं बेस पाथ को jquery में लाना चाहता था।

आधार पथ निम्नलिखित उदाहरण में से कोई भी हो सकता है:

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

exampleभी बदल सकते हैं।



@ मृत्युंजय मैंने पहले ही देख लिया था, लेकिन मेरे मामले में आधार पथ अलग है क्योंकि मैं आधार पथ पाने की कामना करता हूं जैसे php हम जूमला में करते हैं
नवीन रौनियार

तो, किसी भी उत्तर ने आपकी समस्या का समाधान नहीं किया?
आर्टजोम बी।

कृपया जवाब दें
एलनबेरी

जवाबों:


177

यह आपकी मदद करेगा ...

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

हाँ यह काम करता है! http://localhost/myapp/what/ever/sub/folder-> getBaseUrl -> http://localhost/myapp:-)
vee

3
यह सभी मामलों में काम नहीं करेगा, जैसा कि @Artjom बी द्वारा किसी भी तरह से अनिर्धारित उत्तर द्वारा इंगित किया गया है। उदाहरण के लिए, जब किसी साइट का स्थानीय नेटवर्क पर परीक्षण किया जाता है (और डोमेन को आईपी + स्थानीय पथ के साथ प्रतिस्थापित किया जाता है) तो बेस यूआरएल कुछ ऐसा हो सकता है। 192.168.0.23/~sites/site/html/के बजाय site.dev। जावास्क्रिप्ट के साथ पूर्ण पथनाम प्राप्त करना भी एक विकल्प नहीं है, क्योंकि किसी साइट में किसी भी वर्चुअल उपनिर्देशिका हो सकती है।
निश्चित रूप से 9

124

मुझे लगता है कि यह आपके लिए ठीक होगा

var base_url = window.location.origin;

var host = window.location.host;

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

7
अच्छा लघु और मधुर, धन्यवाद। window.location.origin
तेतरदेव

1
यह पसंदीदा उत्तर होना चाहिए, क्योंकि यह संक्षिप्त, संक्षिप्त और ठीक काम करता है।
ग्रेगर

Window.location.origin को
15:

1
@ जर्नोरिगा जो अभी भी 99 ie का उपयोग कर रहा है
एलेक्जेंडर डेब्रॉकोर्ट

2
काश, यह इतना आसान होता कि @AlexandreDaubricourt
jnoreiga

30

इससे बेस यूआरएल मिलेगा

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

यह window.location.href
Z. Khullah

8
यह समान नहीं है, pathname आपको url का पथ सेगमेंट देता है, href में क्वेरी
परम्स

24

यह एक बहुत पुराना सवाल है, लेकिन यहां वे दृष्टिकोण हैं जिनका मैं व्यक्तिगत रूप से उपयोग करता हूं ...

मानक / बेस URL प्राप्त करें

जैसा कि कई पहले ही बता चुके हैं, यह ज्यादातर स्थितियों के लिए काम करता है।

var url = window.location.origin;


पूर्ण आधार URL प्राप्त करें

हालांकि, इस सरल दृष्टिकोण का उपयोग किसी भी पोर्ट संख्या को बंद करने के लिए किया जा सकता है।

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

संपादित करें: जेसन राइस द्वारा प्रस्तुत चिंता को संबोधित करने के लिए , निम्न प्रोटोकॉल प्रकार को स्वचालित रूप से सम्मिलित करने के लिए इस्तेमाल किया जा सकता है ...

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


आधार URL सेट करें

एक बोनस के रूप में - आधार URL को वैश्विक स्तर पर फिर से परिभाषित किया जा सकता है।

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

1
जब तक आपका प्रोटोकॉल http के अलावा कुछ और नहीं है जैसे https (तब url प्रोटोकॉल को "http: //" पर सेट करना वास्तव में कुछ अजीब त्रुटियों को प्रस्तुत करेगा, जो इस बात पर निर्भर करता है कि आप url का उपयोग कैसे करना चाहते हैं)।
जेसन राइस

13

यह जावास्क्रिप्ट से संभव नहीं है, क्योंकि यह एक सर्वर-साइड संपत्ति है। क्लाइंट पर जावास्क्रिप्ट को पता नहीं चल सकता है कि जूमला कहां स्थापित है। सबसे अच्छा विकल्प किसी तरह $this->baseurlसे पेज जावास्क्रिप्ट में मूल्य शामिल करना है और फिर इस मूल्य ( phpBaseUrl) का उपयोग करना है ।

फिर आप इस तरह url का निर्माण कर सकते हैं:

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

1
ध्यान दें कि loc.hostपोर्ट है, एक url के लिए जैसे http://localhost:8082/इस विधि का उत्पादन होगा http://localhost:8082:8082/, window.location.hostnameइसके बजाय का उपयोग किया जाना चाहिए।
तिबेरू सी।

@TiberiuC। धन्यवाद, जोड़ा गया।
आर्टजोम बी


8

कुछ समय पहले एक ही मुद्दा था, मेरी समस्या थी, मुझे बस बेस यूआरएल की जरूरत थी। यहां बहुत सारे विस्तृत विकल्प हैं लेकिन इसके चारों ओर जाने के लिए, बस window.locationऑब्जेक्ट का उपयोग करें । वास्तव में इसे ब्राउज़र कंसोल में टाइप करें और वहां अपने विकल्पों का चयन करने के लिए एंटर दबाएं। खैर मेरे मामले के लिए यह बस था:

window.location.origin

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

लेकिन आप यह नहीं कह सकते हैं कि CodeIgniter (या php joomla) का बेसुरल () उसी मान को लौटाएगा, क्योंकि इन फ्रेमवर्क की .htaccess फाइल में बेसल को बदलना संभव है।

उदाहरण के लिए :

यदि आपके पास अपने। में ऐसी कोई .htaccess फ़ाइल है:

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]

$ यह-> बेसुरल () http: // localhost / CodeIgniter / लौटाएगा


6

मैंने कई जूमला प्रोजेक्ट पर इस जरूरत को पूरा किया है। मुझे पता करने का सबसे सरल तरीका मेरे टेम्पलेट में एक छिपा हुआ इनपुट फ़ील्ड जोड़ना है:

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

जब मुझे जावास्क्रिप्ट में मूल्य की आवश्यकता होती है:

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

शुद्ध जावास्क्रिप्ट का उपयोग कर के रूप में फैंसी के रूप में नहीं बल्कि सरल और काम हो जाता है।



3

मैं विकास में HTML बेस टैग बनाने के लिए सभी को सलाह दूंगा, फिर डायनेमिक रूप से href असाइन करें, इसलिए प्रोडक्शन में जो भी क्लाइंट होस्ट करता है, वह इसे ऑटोमैटिकली एडाप्ट कर देगा:

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

इसलिए यदि आप स्थानीयता में हैं: 8080, आप आधार से हर लिंक या संदर्भित फ़ाइल तक पहुँच जाएंगे, जैसे: http://localhost:8080/some/path/file.html यदि आप www.example.com में हैं, तो यह होगाhttp://www.example.com/some/path/file.html

यह भी ध्यान दें कि, आप जिस भी स्थान पर हैं, आपको हरफ़ में ग्लब्स जैसे संदर्भों का उपयोग नहीं करना चाहिए, जैसे: मूल स्थान का कारण http://localhost:8080/ नहीं http://localhost:8080/some/path/

आधार यूआरएल के बिना पूरी तरह से सजा के रूप में आप सभी हाइपरलिंक का संदर्भ देते हैं।


3

प्रारूप होस्टनाम / पाथनाम / खोज है

तो यूआरएल है:

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

आपके मामले के लिए

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

तो मूल रूप से आधार = hostname = window.location.hostname


3

मुझे आश्चर्य है कि गैर जवाबों के आधार यूआरएल को <base>टैग में सेट किए जाने पर विचार करें । सभी वर्तमान उत्तर होस्ट नाम या सर्वर नाम या पते का पहला भाग प्राप्त करने का प्रयास करते हैं। यह पूरा तर्क है जो <base>टैग पर विचार करता है (जो किसी अन्य डोमेन या प्रोटोकॉल को संदर्भित कर सकता है):

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

जक्वरी प्रारूप:

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

ऊपर दिए गए तर्क के साथ शामिल किए बिना, शॉर्टहैंड समाधान जो <base>टैग और दोनों पर विचार करता हैwindow.location.origin :

जे एस:

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

jQuery:

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

अंतिम नोट: आपके कंप्यूटर में एक स्थानीय फ़ाइल (होस्ट पर नहीं) के लिए window.location.originकेवल वही रिटर्न देता है file://लेकिन ऊपर दिया गया सॉर्टहैंड समाधान पूर्ण सही पथ देता है।


1
यह सबसे अच्छा तरीका नहीं है। इसके अलावा, @ DaniilSamoylov का उत्तर देखें, जिसमें <base>तत्व शामिल है ।
ब्रैड

BaseURI नोड का आधार URL लौटाता है इसलिए इस मामले में यह आधार पथ + दस्तावेज़ का नाम देता है। आपको उस URL से दस्तावेज़ का नाम हटाने के लिए अधिक कोड की आवश्यकता होगी। @ ब्रैड
अली शेखपुर

जब वेब पेज की रूट डायरेक्टरी उप निर्देशिका (उदाहरण example.com/appRoot ) के भीतर होती है तो यह समाधान सही आधार URL को वापस नहीं देता है । यह केवल तभी काम करता है जब वेबपेज की रूट डाइर सीधे वेबहोस्ट के रूट पर स्थित हो।
माइकल हाफनर

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

जेनिश के उत्तर के लगभग समान लेकिन थोड़ा कम।


2

मैं बस एक ही मंच पर था और यह समाधान मेरे लिए काम करता है

दृश्य में

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

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

Js फ़ाइल में आप baseअपने परिदृश्य में उदाहरण के लिए एक चर के रूप में उपयोग करते हैं:

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

मुझे याद नहीं है कि मैं क्रेडिट देने के लिए यह जानकारी कहां लेता हूं, अगर मुझे लगता है कि मैं जवाब को संपादित करूंगा


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

1
कृपया अपने उत्तर में एक विवरण जोड़ने पर विचार करें।
मकर

1

यहां कुछ त्वरित है जो साथ काम करता है file:// URL के ।

मैं इस एक लाइनर के साथ आया:

[((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.comमैं बदल सकता हूं इसलिए मुझे संदेह है कि वास्तव में आपको अपनी स्क्रिप्ट के लिए सापेक्ष पथ संकेतन का उपयोग करने में सक्षम होने के लिए आधार यूआरएल की आवश्यकता है। इस विशेष मामले में स्क्रिप्टिंग का उपयोग करने की आवश्यकता नहीं है - इसके बजाय अपने हेडर में आधार टैग जोड़ें:

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

मैं आमतौर पर PHP के माध्यम से लिंक उत्पन्न करता हूं।


0

मामले में किसी को भी यह एक बहुत मजबूत समारोह में टूट देखना चाहते हैं

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

इससे बस पूरा url मिलता है। आधार URL नहीं।
सैम

वास्तव में, यकीन नहीं है कि मैं कहाँ जा रहा था। मैं लंबे समय से सर्वर-साइड कोड
nuander

0

आसान

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

खाली src-name के साथ एक img उत्पन्न करता है जो ब्राउज़र को आधार-url की गणना करने के लिए बाध्य करता है, भले ही आपके पास /index.htmlकुछ भी हो।


यह सभी का सबसे सुरुचिपूर्ण समाधान लगता है और केवल एक ही है जो ब्राउज़र तर्क की नकल नहीं करता है, जो अच्छा है। मुझे आश्चर्य है कि यह कितना पोर्टेबल है। क्या एचटीएमएल स्पेक्स में ऐसा कुछ है जो यह सुझाव देगा कि सभी ब्राउज़रों में काम करने की गारंटी है?
मैथिज्स कोइजमैन

@MatthijsKooijman HTML चश्मा की व्याख्या पर निर्भर करता है। यदि आप कहते हैं कि लंबाई का फ़ाइल नाम 0 एक वैध संसाधन-नाम है ... यह सभी ब्राउज़रों से मेल खाता है।
ग्रिम

समझें कि ब्राउज़र कैसे बनाए जाते हैं। आपके पास कुछ प्रोग्रामर हैं, (अप्रत्यक्ष) एक ब्राउज़र बनाने की इच्छा रखते हैं। उनका पहला स्रोत html-चश्मा है। वे चश्मा पढ़ते हैं और यह उन सवालों में से एक है जिन्हें वे हल करना पसंद करते हैं। आप सोचेंगे कि वे (सभी) इस परिस्थितियों पर कैसे निर्णय लेते हैं?
ग्रिम


-4

इसे अपने हेडर में रखें, इसलिए जब भी आपको इसकी आवश्यकता होगी यह उपलब्ध होगा।

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

आप मिल जाएगा http://localhost:81/your-path-fileया http://localhost/your-path-file

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.