ใครช่วยบอกความแตกต่างระหว่างwindow.location.href
และtop.location.href
?
และยังใช้ที่ใด
แล้วอันไหนจะดีกว่ากันเมื่อเปลี่ยนเส้นทางหลังจาก ajax call ใน mvc?
ใครช่วยบอกความแตกต่างระหว่างwindow.location.href
และtop.location.href
?
และยังใช้ที่ใด
แล้วอันไหนจะดีกว่ากันเมื่อเปลี่ยนเส้นทางหลังจาก ajax call ใน mvc?
คำตอบ:
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);
top.location.href
window.top.location.href
window
top
วัตถุมีความหมายมากขึ้นภายในเฟรม ภายในเฟรมwindow
หมายถึงหน้าต่างของเฟรมปัจจุบันในขณะที่top
อ้างถึงหน้าต่างด้านนอกสุดที่มีเฟรม ดังนั้น:
window.location.href = 'somepage.html';
หมายถึงการโหลดsomepage.html
ภายในเฟรม
top.location.href = 'somepage.html';
หมายถึงการโหลดsomepage.html
ในหน้าต่างเบราว์เซอร์หลัก
top
หมายถึงวัตถุหน้าต่างที่มีเฟรมปัจจุบันทั้งหมด (บิดาของหน้าต่างที่เหลือ) เป็นปัจจุบันwindow
window
http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific
ดังนั้นจึงtop.location.href
สามารถมีลิงก์เพจ "หลัก" ที่มีเฟรมทั้งหมดในขณะที่window.location.href
มีเพียงลิงก์เพจ "ปัจจุบัน"
รายการแรกจะเพิ่มรายการในประวัติของคุณซึ่งคุณสามารถ (หรือควรจะทำได้) คลิก "ย้อนกลับ" และกลับไปที่หน้าปัจจุบัน
รายการที่สองแทนที่รายการประวัติปัจจุบันดังนั้นคุณจึงไม่สามารถย้อนกลับไปได้
ดูwindow.location
:
assign(url)
: โหลดเอกสารตาม URL ที่ระบุ
replace(url)
: แทนที่เอกสารปัจจุบันด้วยเอกสารที่ URL ที่ให้มา ความแตกต่างจากassign()
วิธีการคือหลังจากใช้replace()
หน้าปัจจุบันจะไม่ถูกบันทึกไว้ในประวัติเซสชันซึ่งหมายความว่าผู้ใช้จะไม่สามารถใช้ปุ่มย้อนกลับเพื่อไปยังหน้านั้นได้
window.location.href = url;
เป็นที่ชื่นชอบมากกว่า:
window.location = url;