ความแตกต่างระหว่าง window.location.href, window.location.replace และ window.location.assign


129

อะไรคือความแตกต่างระหว่าง

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

ฉันอ่านในฟอรัมหลายแห่งที่window.location.assign()เพิ่งแทนที่ประวัติเซสชันปัจจุบันและด้วยเหตุนี้ปุ่มย้อนกลับของเบราว์เซอร์จะไม่ทำงาน อย่างไรก็ตามฉันไม่สามารถทำซ้ำสิ่งนี้ได้

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>

1
คุณสามารถดูโพสต์เก่าใน url: stackoverflow.com/questions/1865837/…หวังว่าจะเป็นประโยชน์

นี่เป็นคำอธิบายที่ดีกว่า: stackoverflow.com/a/847130/96656
Mathias Bynens

คำตอบ:


165

สิ่งเหล่านี้ทำสิ่งเดียวกัน:

window.location.assign(url);
window.location = url;
window.location.href = url;

เพียงแค่ไปที่ URL ใหม่ ในทางกลับกันreplaceเมธอดจะนำทางไปยัง URL โดยไม่ต้องเพิ่มระเบียนใหม่ในประวัติ

ดังนั้นสิ่งที่คุณอ่านในหลายรูปแบบจึงไม่ถูกต้อง assignวิธีการจะเพิ่มระเบียนใหม่ลงในประวัติศาสตร์

อ้างอิง: http://developer.mozilla.org/en/window.location


1
ขอบคุณมากสำหรับคำตอบ มันช่วยฉันได้มากในการแก้ไขปัญหาปุ่มย้อนกลับของเบราว์เซอร์
santosh kumar patro

@blunderboy: มันเป็นคำตอบยอดนิยมจากการถล่มดังนั้นมันจะไม่เปลี่ยนแปลงอะไรเลย
BoltClock

แล้วประเด็นassign()คืออะไร? location = ...จากคำตอบนี้และเอกสารมันเสียงจะเหมือนกัน
Mitya

11

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

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

ถ้าคุณอยากที่จะทำให้ปุ่มย้อนกลับไม่ทำงาน (อาจจะไม่ได้ "ใช้งานง่าย": คิดอีกครั้งว่าที่จริงสิ่งที่คุณต้องการจะทำ) "เปิด" เป็นแบรนด์ที่หน้าต่างใหม่ (คุณสามารถ "เปิด" ป๊อปอัพที่ไม่ได้มีปุ่ม "ย้อนกลับ" เกินไป ... แต่ป๊อบอัพไม่เป็นที่นิยมมากวันนี้ :-) ถ้าคุณต้องการที่จะให้หน้าของคุณแสดงไม่ว่าสิ่งที่ผู้ใช้ไม่ได้ ( อีกครั้ง "ความเป็นมิตรกับผู้ใช้" เป็นเรื่องที่น่าสงสัย) ตั้งค่าตัวจัดการ window.onunload ที่เพิ่งโหลดหน้าเว็บของคุณซ้ำอีกครั้งโดยชัดเจนตั้งแต่ต้นทุกครั้ง


4
'ไม่มีฟังก์ชันหรือการรวมกันของพารามิเตอร์ที่ฉันรู้ว่าสามารถเปลี่ยนแปลงหรือเขียนทับรายการประวัติได้' ... ยินดีต้อนรับสู่ HTML5
SpYk3HH

6
การไม่สามารถเปลี่ยนแปลงหรือเขียนทับรายการประวัติเบราว์เซอร์ที่คุณไม่ได้เป็นเจ้าของเป็นกฎความปลอดภัยที่มีมานานแล้ว HTML5 เพียงแค่ทำตามกฎนั้นต่อไป
Chuck Kollars

คุณพลาดประเด็นหรือการถากถางมากกว่า ค้นหา html5 และประวัติ
SpYk3HH
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.