รับ URL ปัจจุบันด้วย JavaScript หรือไม่


3003

ทั้งหมดที่ฉันต้องการคือการได้รับ URL เว็บไซต์ ไม่ใช่ URL ที่นำมาจากลิงก์ ในการโหลดหน้าฉันจะต้องสามารถดึง URL ปัจจุบันเต็มรูปแบบของเว็บไซต์และตั้งเป็นตัวแปรที่จะทำตามที่ฉันต้องการ


2
ซ้ำกันที่เป็นไปได้: รับโปรโตคอลโดเมนและพอร์ตจาก URL
blong

คำตอบ:


3684

ใช้:

window.location.href 

ดังที่ระบุไว้ในความคิดเห็นบรรทัดด้านล่างใช้งานได้ แต่มันถูกบั๊กสำหรับ Firefox

document.URL;

ดูURL ประเภท DOMString แบบอ่านอย่างเดียว


142
ใน Firefox 12 document.URLพร็อพเพอร์ตี้จะไม่อัปเดตหลังจากเป็นwindow.locationตัวยึด (#) ในขณะที่window.location.hrefทำ ฉันได้ทำการสาธิตสดที่นี่: jsfiddle.net/PxgKyฉันไม่ได้ทดสอบ Firefox เวอร์ชั่นอื่น ๆ ไม่พบปัญหาในการใช้งานdocument.URLใน Chrome 20 และ IE9
Telmo Marques

88
นอกจากนี้คุณยังสามารถรับโฮสต์และตำแหน่งที่ชัดเจน: window.location.hostและwindow.location.href.toString().split(window.location.host)[1]
ali youhannaei

8
และสิ่งที่document.baseURIเกี่ยวกับการแล้ว โดยทั่วไปมี 3 วิธีที่จะได้รับ URL document.baseURI, และdocument.URL location
มูฮัมหมัดอูเมอร์

20
-1: ถ้าคุณมีกรอบรูปภาพหรือแบบฟอร์มด้วยname="URL"คุณสมบัตินี้จะเป็นเงาบนdocumentวัตถุและรหัสของคุณจะแตก ในกรณีนั้นdocument.URLจะอ้างถึงโหนด DOM แทน window.location.hrefดีกว่าการใช้คุณสมบัติของวัตถุโลกในขณะที่
Roy Tinker

13
"window.location.href" สำหรับผู้ชนะ
GabrielBB

662

การเข้าถึงข้อมูล URL

JavaScript มีวิธีการมากมายในการดึงและเปลี่ยน URL ปัจจุบันซึ่งแสดงในแถบที่อยู่ของเบราว์เซอร์ วิธีการทั้งหมดนี้ใช้Locationวัตถุซึ่งเป็นคุณสมบัติของWindowวัตถุ คุณสามารถสร้างLocationวัตถุใหม่ที่มี URL ปัจจุบันดังต่อไปนี้:

var currentLocation = window.location;

โครงสร้าง URL พื้นฐาน

<protocol>//<hostname>:<port>/<pathname><search><hash>
  • โปรโตคอล:ระบุชื่อโปรโตคอลที่จะใช้ในการเข้าถึงทรัพยากรบนอินเทอร์เน็ต (HTTP (ไม่มี SSL) หรือ HTTPS (พร้อม SSL))

  • ชื่อโฮสต์:ชื่อโฮสต์ระบุโฮสต์ที่เป็นเจ้าของทรัพยากร ตัวอย่างเช่นwww.stackoverflow.com. เซิร์ฟเวอร์ให้บริการโดยใช้ชื่อของโฮสต์

  • พอร์ต:หมายเลขพอร์ตที่ใช้เพื่อจดจำกระบวนการเฉพาะที่อินเทอร์เน็ตหรือข้อความเครือข่ายอื่น ๆ จะถูกส่งต่อเมื่อมาถึงเซิร์ฟเวอร์

  • ชื่อพา ธ :เส้นทางให้ข้อมูลเกี่ยวกับทรัพยากรเฉพาะภายในโฮสต์ที่เว็บไคลเอ็นต์ต้องการเข้าถึง ตัวอย่างเช่น/index.html.

  • search:สตริงเคียวรีตามหลังส่วนประกอบพา ธ และจัดเตรียมสตริงของข้อมูลที่รีซอร์สสามารถใช้เพื่อวัตถุประสงค์บางอย่าง (เช่นเป็นพารามิเตอร์สำหรับการค้นหาหรือเป็นข้อมูลที่จะประมวลผล)

  • แฮช:ส่วนที่ยึดของ URL รวมถึงเครื่องหมายแฮช (#)

ด้วยLocationคุณสมบัติวัตถุเหล่านี้คุณสามารถเข้าถึงส่วนประกอบ URL เหล่านี้ทั้งหมดและสิ่งที่พวกเขาสามารถตั้งค่าหรือกลับมา

  • href - URL ทั้งหมด
  • โปรโตคอล - โปรโตคอลของ URL
  • host - ชื่อโฮสต์และพอร์ตของ URL
  • ชื่อโฮสต์ - ชื่อโฮสต์ของ URL
  • พอร์ต - หมายเลขพอร์ตที่เซิร์ฟเวอร์ใช้สำหรับ URL
  • ชื่อพา ธ - ชื่อเส้นทางของ URL
  • ค้นหา - ส่วนแบบสอบถามของ URL
  • hash - ส่วนสมอของ URL

ฉันหวังว่าคุณจะได้คำตอบของคุณ ..


7
พวกเขาจะไม่ "วิธีการ" ของwindow.locationแต่คุณสมบัติและที่นี่เรามีตัวอย่างvar stringPathName = window.location.pathname :
Peter Krauss

@FabioC substringคุณสามารถลบมันด้วย อย่างไรก็ตามอาจมีประโยชน์เมื่อคุณต้องการใช้เพื่อเปลี่ยนเส้นทางdocument.location = "/page.html";จะเปลี่ยนเส้นทางไปยังหน้ารูทpage.html
FindOut_Quran

1
คำตอบนี้เป็นมากกว่าคำถามที่ระบุไว้ ในความเป็นจริงฉันค้นหาอาจประมาณหนึ่งเดือนที่ผ่านมาเพื่อหาวิธีที่ดีในการดึงส่วนที่เจาะจงจากสตริง URL (ฉันคิดว่าอาจเป็นหน้าปัจจุบันที่ฉันพยายามรับ) และแม้ว่าคำถามอื่น ๆ เป้าหมายเป้าหมายคำตอบของพวกเขาไม่เป็นประโยชน์และตรงไปตรงมาเพื่อจุดประสงค์เช่นนี้
Panzercrisis

1
หนึ่งคำแนะนำอย่างรวดเร็วแม้ว่า: ในโครงสร้าง URL พื้นฐานที่อธิบายข้างต้นมีจุดสำหรับแต่ในรายการของรายละเอียดดังต่อไปนี้ก็เรียกว่าsearch queryอาจจะสามารถปรับให้เข้ากันได้หรือสามารถเพิ่มคำอธิบายเพิ่มเติมได้
Panzercrisis

1
มันเรียกว่า 'ค้นหา' ไม่ใช่ 'ข้อความค้นหา'
Apollo Data

320

ใช้window.locationสำหรับการอ่านและเขียนการเข้าถึงวัตถุตำแหน่งที่เกี่ยวข้องกับเฟรมปัจจุบัน ถ้าคุณเพียงต้องการที่จะได้รับอยู่เป็นสตริงอ่านอย่างเดียวคุณอาจใช้ซึ่งควรมีค่าเช่นเดียวกับdocument.URLwindow.location.href



264

รับ URL หน้าปัจจุบัน:

window.location.href

3
โปรดทราบว่านั่นคือที่ตั้งของหน้าต่างไม่ใช่เอกสาร
Gumbo

16
มันเป็นสิ่งเดียวกัน URL ปัจจุบันเต็มอ้างถึงเส้นทางเอกสาร (ที่อยู่ภายนอก)
Zanoni

2
มันเป็นมาตรฐานเช่น document.url หรือไม่ (ผมหมายถึงสิ่งที่ต้องการเอกสาร W3C ก)
chendral

documentเป็นรูทของทรีเอกสารที่กำหนดโดยสเป็ค windowโดยทั่วไปจะเทียบเท่า แต่อาจไม่ได้อยู่ในบางสถานการณ์ที่แปลก
broinjc

57

ตกลงการรับURL แบบเต็มของหน้าปัจจุบันนั้นทำได้ง่ายโดยใช้ JavaScript บริสุทธิ์ ตัวอย่างเช่นลองใช้รหัสนี้ในหน้านี้:

window.location.href;
// use it in the console of this page will return
// http://stackoverflow.com/questions/1034621/get-current-url-in-web-browser"

window.location.hrefคุณสมบัติส่งกลับ URL ของหน้าปัจจุบัน

document.getElementById("root").innerHTML = "The full URL of this page is:<br>" + window.location.href;
<!DOCTYPE html>
<html>

<body>
  <h2>JavaScript</h2>
  <h3>The window.location.href</h3>
  <p id="root"></p>
</body>

</html>

ไม่เลวที่จะพูดถึงสิ่งเหล่านี้เช่นกัน:

  • หากคุณต้องการเส้นทางสัมพัทธ์ให้ใช้window.location.pathname;

  • หากคุณต้องการได้รับชื่อโฮสต์คุณสามารถใช้window.location.hostname;

  • และถ้าคุณต้องการแยกโปรโตคอลให้ใช้ window.location.protocol

    • นอกจากนี้ถ้าหน้าของคุณมีแท็กคุณจะได้รับมันเช่น:hashwindow.location.hash

ดังนั้นwindow.location.hrefจัดการทั้งหมดในครั้งเดียว ... โดยพื้นฐาน:

window.location.protocol + '//' + window.location.hostname + window.location.pathname + window.location.hash === window.location.href;
    //true

นอกจากนี้ยังใช้windowไม่จำเป็นถ้าอยู่ในขอบเขตหน้าต่าง ...

ดังนั้นในกรณีนี้คุณสามารถใช้:

location.protocol

location.hostname

location.pathname

location.hash

location.href

รับ URL ปัจจุบันด้วย JavaScript


window.location.protocol + '//' + window.location.hostname + window.location.pathname + window.location.hash === window.location.href; ไม่จริงเสมอไป! window.location.pathname ไม่มีพารามิเตอร์ GET
Assassin


35

เปิดเครื่องมือสำหรับนักพัฒนาพิมพ์ต่อไปนี้ในที่คอนโซลและกดEnter

window.location

เช่นด้านล่างเป็นภาพหน้าจอของผลลัพธ์ในหน้าปัจจุบัน

ป้อนคำอธิบายรูปภาพที่นี่

คว้าสิ่งที่คุณต้องการจากที่นี่ :)


29

window.location.hrefการใช้งาน:

ตามที่ระบุไว้ข้างต้นdocument.URL ไม่ปรับปรุงwindow.locationเมื่อปรับปรุง ดูMDN


21
  • ใช้window.location.hrefเพื่อรับ URL ที่สมบูรณ์
  • ใช้window.location.pathnameเพื่อรับ URL ออกจากโฮสต์

4
window.location.pathname ไม่รวมการสืบค้นและส่วนย่อยแฮช
OMGPOP


10
var currentPageUrlIs = "";
if (typeof this.href != "undefined") {
       currentPageUrlIs = this.href.toString().toLowerCase(); 
}else{ 
       currentPageUrlIs = document.location.toString().toLowerCase();
}

รหัสข้างต้นยังสามารถช่วยใครบางคน


2
คุณใช้. toLowerCase () กับ url ซึ่งเปลี่ยนแปลงได้จริง เซิร์ฟเวอร์บางตัวต้อง
คำนึงถึงตัว

คุณควรใช้ window.href อย่างละเอียด รหัสนี้จะทำงานในบริบทที่หน้าต่างนี้ === อย่างไรก็ตามอาจไม่เป็นเช่นนั้นโดยเฉพาะถ้ามีคนวางโซลูชันนี้
deadboy

ไม่ใช่เซิร์ฟเวอร์ "บางตัว" ที่ต้องตรงตามตัวพิมพ์ใหญ่ - เล็ก มันเป็นเซิร์ฟเวอร์ที่สุด ดังนั้นฉันเห็นด้วยกับ AnthonyVO: การเปลี่ยนกรณีของ URL เป็นความคิดที่แย่มาก
mivk

คุณไม่สามารถ toLowerCase () URL ที่แน่ใจว่าจะไม่ทำลาย !!! หาก url คือhttp://www.server.com/path/to/Script.php?option=A1B2C3ถ้าระบบไฟล์เป็นแบบตรงตามตัวพิมพ์ใหญ่ (Linux / Unix) ที่ไม่จำเป็นต้องมี Script.php และ script.php เหมือนกัน และแม้ว่าจะไม่ได้เป็นกรณีที่สำคัญ (Windows, Mac Os บางส่วน) ?option=A1B2C3จะไม่เหมือนกับของหรือแม้กระทั่ง?option=a1b2c3 ?Option=A1B2C3เฉพาะเซิร์ฟเวอร์เท่านั้นที่มีตัวพิมพ์เล็กและตัวพิมพ์ใหญ่: www.server.com หรือ www.SeRvEr.cOm เหมือนกัน
FrancescoMM

8

การเพิ่มผลลัพธ์เพื่อการอ้างอิงอย่างรวดเร็ว

window.location;

 Location {href: "/programming/1034621/get-the-current-url-with-javascript",
 ancestorOrigins: DOMStringList,
 origin: "https://stackoverflow.com",
 replace: ƒ, assign: ƒ, …}

document.location

  Location {href: "/programming/1034621/get-the-current-url-with-javascript", 
ancestorOrigins: DOMStringList,
 origin: "https://stackoverflow.com",
 replace: ƒ, assign: ƒ
, …}

window.location.pathname

"/questions/1034621/get-the-current-url-with-javascript"

window.location.href

"/programming/1034621/get-the-current-url-with-javascript"

location.hostname

"stackoverflow.com"

7

สำหรับ URL ที่สมบูรณ์พร้อมสตริงการสืบค้น:

document.location.toString().toLowerCase();

สำหรับ URL โฮสต์:

window.location

11
คุณใช้. toLowerCase () กับ url ซึ่งเปลี่ยนแปลงได้จริง เซิร์ฟเวอร์บางตัวต้อง
คำนึงถึงตัว

ตามที่กล่าวไว้คุณไม่สามารถ toLowerCase () URL ที่แน่ใจว่าจะไม่ทำลาย !!! หาก url คือserver.com/path/to/Script.php?option=A1B2C3หากระบบไฟล์เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (Linux / Unix) ไม่จำเป็นต้องใช้ Script.php และ script.php เหมือนกัน และแม้ว่าจะไม่ตรงตามตัวพิมพ์ใหญ่ - เล็ก (Windows, Mac OS บางตัว),? option = A1B2C3 ไม่เหมือนกันของ? option = a1b2c3 หรือแม้แต่ Option = A1B2C3 เฉพาะเซิร์ฟเวอร์เท่านั้นที่มีตัวพิมพ์เล็กและตัวพิมพ์ใหญ่: www.server.com หรือ www.SeRvEr.cOm เหมือนกัน
FrancescoMM

ขอบคุณ AnthonyVO สำหรับการชี้เรื่องนี้ เราสามารถใช้ document.location.toString () เพื่อรับ URL ที่สมบูรณ์เท่านั้น toLowerCase () คือการเปรียบเทียบเช่น indexOf ในสคริปต์ของคุณ
Syed Nasir Abbas

4

ใน JSTL เราสามารถเข้าถึงเส้นทาง URL pageContext.request.contextPathปัจจุบันใช้ หากคุณต้องการโทร Ajax ให้ใช้ URL ต่อไปนี้

url = "${pageContext.request.contextPath}" + "/controller/path"

ตัวอย่าง: สำหรับหน้านี้จะให้http://stackoverflow.com/posts/36577223http://stackoverflow.com/controller/path


4

window.locationวิธีการรับวัตถุตำแหน่งปัจจุบันคือ

เปรียบเทียบสิ่งนี้กับdocument.locationซึ่ง แต่เดิมส่งคืน URL ปัจจุบันเป็นสตริงเท่านั้น น่าจะเป็นที่จะหลีกเลี่ยงความสับสนถูกแทนที่ด้วยdocument.locationdocument.URL

และเบราว์เซอร์ที่ทันสมัย map เพื่อdocument.locationwindow.location

ในความเป็นจริงเพื่อความปลอดภัยของเบราว์เซอร์ที่คุณควรใช้มากกว่าwindow.locationdocument.location



3

คำตอบของ Nikhil Agrawal นั้นยอดเยี่ยมเพียงเพิ่มตัวอย่างเล็ก ๆ น้อย ๆ ที่นี่คุณสามารถทำได้ในคอนโซลเพื่อดูส่วนประกอบต่าง ๆ ในการทำงาน:

ป้อนคำอธิบายรูปภาพที่นี่

ถ้าคุณต้องการ URL พื้นฐานที่ไม่มีพารามิเตอร์พา ธ หรือเคียวรี (ตัวอย่างเช่นการร้องขอ AJAX เพื่อทำงานบนเซิร์ฟเวอร์การพัฒนา / การจัดเตรียมและการใช้งาน) window.location.originจะเป็นการดีที่สุดเนื่องจากจะเก็บโปรโตคอลและพอร์ตเสริม (ในการพัฒนา Django มีพอร์ตที่ไม่ได้มาตรฐานซึ่งจะแตกถ้าคุณใช้ชื่อโฮสต์ ฯลฯ )



0

คุณสามารถรับลิงค์เต็มของหน้าปัจจุบันผ่านlocation.href และเพื่อรับลิงค์ของคอนโทรลเลอร์ปัจจุบันให้ใช้:

location.href.substring(0, location.href.lastIndexOf('/'));


0

หากคุณอ้างถึงลิงก์เฉพาะที่มีรหัสนี้สามารถช่วยคุณได้

$(".disapprove").click(function(){
    var id = $(this).attr("id");

    $.ajax({
        url: "<?php echo base_url('index.php/sample/page/"+id+"')?>",
        type: "post",
        success:function()
        {
            alert("The Request has been Disapproved");
            window.location.replace("http://localhost/sample/page/"+id+"");
        }
    });
});

ฉันใช้อาแจ็กซ์ที่นี่เพื่อส่งรหัสและเปลี่ยนหน้าโดยใช้window.location.replace เพียงเพิ่มแอตทริบิวต์id=""ตามที่ระบุไว้



-2

ขั้นแรกให้ตรวจสอบการโหลดหน้าเว็บอย่างสมบูรณ์

browser,window.location.toString();

window.location.href

จากนั้นเรียกใช้ฟังก์ชันที่รับ URL ตัวแปร URL และพิมพ์บนคอนโซล

$(window).load(function(){
   var url = window.location.href.toString();
   var URL = document.URL;
   var wayThreeUsingJQuery = $(location).attr('href');
   console.log(url);
   console.log(URL);
   console.log(wayThreeUsingJQuery );
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.