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


93

ใครช่วยบอกความแตกต่างระหว่างwindow.location.hrefและtop.location.href?

และยังใช้ที่ใด

แล้วอันไหนจะดีกว่ากันเมื่อเปลี่ยนเส้นทางหลังจาก ajax call ใน mvc?


ฉันลืมบอกไปว่าฉันต้องเปลี่ยนเส้นทางไปยัง url ใหม่ใน. net MVC .. เมื่อฉันใช้ top.location.href มันใช้งานได้ในขณะที่ window.location ไม่ได้ .. คุณสามารถบอกเหตุผลได้ไหมว่าทำไม ????
Egalitarian

คำตอบ:


125

window.location.href ส่งคืนตำแหน่งของหน้าปัจจุบัน

top.location.href(ซึ่งเป็นนามแฝงของwindow.top.location.href) ส่งคืนตำแหน่งของหน้าต่างบนสุดในลำดับชั้นของหน้าต่าง หากหน้าต่างไม่มีพาเรนต์topจะเป็นการอ้างอิงถึงตัวมันเอง (หรืออีกนัยหนึ่งคือwindow=== window.top)

topมีประโยชน์ทั้งเมื่อคุณจัดการกับเฟรมและเมื่อจัดการกับหน้าต่างที่เปิดโดยหน้าอื่น ๆ ตัวอย่างเช่นหากคุณมีเพจที่เรียกtest.htmlด้วยสคริปต์ต่อไปนี้:

var newWin=window.open('about:blank','test','width=100,height=100');
newWin.document.write('<script>alert(top.location.href);</script>');

การแจ้งเตือนที่ได้จะมีเส้นทางแบบเต็มไปยัง test.html - not about: blank ซึ่งเป็นสิ่งที่window.location.hrefจะส่งกลับ

หากต้องการตอบคำถามของคุณเกี่ยวกับการเปลี่ยนเส้นทางไปที่ window.location.assign(url);


3
มันเป็นสิ่งที่ถูกต้องที่จะเรียกนามแฝงของ? ฉันคิดว่าตัวแปรที่เรียกว่า "global" นั้นเป็นการชวเลขของคุณสมบัติในขณะที่นามแฝงบอกเป็นนัยว่าเป็นตัวแปรอิสระที่ชี้ไปที่เดียวกัน top.location.hrefwindow.top.location.hrefwindow
just.another.programmer

25

topวัตถุมีความหมายมากขึ้นภายในเฟรม ภายในเฟรมwindowหมายถึงหน้าต่างของเฟรมปัจจุบันในขณะที่topอ้างถึงหน้าต่างด้านนอกสุดที่มีเฟรม ดังนั้น:

window.location.href = 'somepage.html';หมายถึงการโหลดsomepage.htmlภายในเฟรม

top.location.href = 'somepage.html';หมายถึงการโหลดsomepage.htmlในหน้าต่างเบราว์เซอร์หลัก

สองวัตถุที่น่าสนใจอื่น ๆและselfparent


9

topหมายถึงวัตถุหน้าต่างที่มีเฟรมปัจจุบันทั้งหมด (บิดาของหน้าต่างที่เหลือ) เป็นปัจจุบันwindowwindow

http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific

ดังนั้นจึงtop.location.hrefสามารถมีลิงก์เพจ "หลัก" ที่มีเฟรมทั้งหมดในขณะที่window.location.hrefมีเพียงลิงก์เพจ "ปัจจุบัน"


7

รายการแรกจะเพิ่มรายการในประวัติของคุณซึ่งคุณสามารถ (หรือควรจะทำได้) คลิก "ย้อนกลับ" และกลับไปที่หน้าปัจจุบัน

รายการที่สองแทนที่รายการประวัติปัจจุบันดังนั้นคุณจึงไม่สามารถย้อนกลับไปได้

ดูwindow.location:

  • assign(url): โหลดเอกสารตาม URL ที่ระบุ

  • replace(url): แทนที่เอกสารปัจจุบันด้วยเอกสารที่ URL ที่ให้มา ความแตกต่างจากassign()วิธีการคือหลังจากใช้replace()หน้าปัจจุบันจะไม่ถูกบันทึกไว้ในประวัติเซสชันซึ่งหมายความว่าผู้ใช้จะไม่สามารถใช้ปุ่มย้อนกลับเพื่อไปยังหน้านั้นได้

window.location.href = url;

เป็นที่ชื่นชอบมากกว่า:

window.location = url;

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