ใน JavaScript เมื่อใดควรใช้window.opener
/ window.parent
/ window.top
?
ใน JavaScript เมื่อใดควรใช้window.opener
/ window.parent
/ window.top
?
คำตอบ:
window.opener
หมายถึงหน้าต่างที่เรียกwindow.open( ... )
ให้เปิดหน้าต่างที่เรียกว่าwindow.parent
หมายถึงพาเรนต์ของหน้าต่างใน<frame>
หรือ<iframe>
window.top
หมายถึงหน้าต่างด้านบนสุดจากหน้าต่างที่ซ้อนอยู่ในหน้าต่าง<iframe>
ย่อยอย่างน้อยหนึ่งชั้นสิ่งเหล่านี้จะเป็นnull
(หรืออาจจะundefined
) เมื่อไม่เกี่ยวข้องกับสถานการณ์ของหน้าต่างอ้างอิง ("หน้าต่างอ้างอิง" หมายถึงหน้าต่างที่มีการเรียกใช้โค้ด JavaScript ในบริบท)
window.open()
ในการส่งเพจ ตอนนี้หน้าต่างลูกนี้เปิดหน้าต่างลูกอีกบานด้วยwindow.open()
ตัวเองปิดเดียวกัน ตอนนี้เมื่อฉันส่งลูกคนที่สองของฉัน (ไม่มีลูกคนแรกแล้ว) ฉันต้องการเข้าถึงองค์ประกอบของหน้าของหน้าหลักของฉัน เป็นไปได้ไหมจากลูกคนที่สองเมื่อลูกคนแรกไม่มีอีกแล้ว
window.opener.opener
ก่อนที่หน้ากลางจะหายไป
ฉันคิดว่าคุณต้องเพิ่มบริบทให้กับคำถามของคุณ อย่างไรก็ตามข้อมูลพื้นฐานเกี่ยวกับสิ่งเหล่านี้สามารถพบได้ที่นี่:
window.opener
https://developer.mozilla.org/en-US/docs/Web/API/Window.opener
ฉันใช้ window.opener เป็นส่วนใหญ่เมื่อเปิดหน้าต่างใหม่ที่ทำหน้าที่เป็นกล่องโต้ตอบที่ต้องป้อนข้อมูลผู้ใช้และจำเป็นต้องส่งข้อมูลกลับไปที่หน้าต่างหลัก อย่างไรก็ตามสิ่งนี้ถูก จำกัด โดยนโยบายต้นทางดังนั้นคุณต้องตรวจสอบให้แน่ใจว่าทั้งเนื้อหาจากกล่องโต้ตอบและหน้าต่างตัวเปิดถูกโหลดจากต้นทางเดียวกัน
window.parent
https://developer.mozilla.org/en-US/docs/Web/API/Window.parent
ฉันใช้สิ่งนี้เป็นส่วนใหญ่เมื่อทำงานกับ IFrames ที่ต้องสื่อสารกับวัตถุหน้าต่างที่มีอยู่
window.top
https://developer.mozilla.org/en-US/docs/Web/API/Window.top
สิ่งนี้มีประโยชน์เพื่อให้แน่ใจว่าคุณกำลังโต้ตอบกับหน้าต่างเบราว์เซอร์ระดับบนสุด คุณสามารถใช้เพื่อป้องกันไม่ให้เว็บไซต์อื่นสร้าง iframing เว็บไซต์ของคุณได้
หากคุณเพิ่มรายละเอียดเพิ่มเติมในคำถามของคุณเราสามารถให้ตัวอย่างอื่น ๆ ที่เกี่ยวข้องเพิ่มเติมได้
อัปเดต:
มีสองสามวิธีที่คุณสามารถจัดการกับสถานการณ์ของคุณได้
คุณมีโครงสร้างดังต่อไปนี้:
เมื่อ Dialog 1 รันโค้ดเพื่อเปิด Dialog 2 หลังจากสร้าง Dialog 2 ให้ไดอะล็อก 1 ตั้งค่าคุณสมบัติบน Dialog 2 ที่อ้างอิงตัวเปิด Dialog1
ดังนั้นหาก "childwindow" คุณเป็นตัวแปรสำหรับวัตถุหน้าต่างโต้ตอบ 2 และ "หน้าต่าง" เป็นตัวแปรสำหรับวัตถุหน้าต่างโต้ตอบ 1 หลังจากเปิดกล่องโต้ตอบ 2 แต่ก่อนปิดกล่องโต้ตอบ 1 ให้ทำการมอบหมายคล้ายกับสิ่งนี้:
childwindow.appMainWindow = window.opener
หลังจากทำการมอบหมายด้านบนแล้วให้ปิดกล่องโต้ตอบ 1 จากนั้นจากโค้ดที่ทำงานอยู่ภายใน dialog2 คุณควรจะสามารถใช้
window.appMainWindow
อ้างอิงหน้าต่างหลักอ็อบเจกต์หน้าต่าง
หวังว่านี่จะช่วยได้
window.open()
ในการส่งเพจ ตอนนี้หน้าต่างลูกนี้เปิดหน้าต่างลูกอีกบานด้วยwindow.open()
ตัวเองปิดเดียวกัน ตอนนี้เมื่อฉันส่งลูกคนที่สองของฉัน (ไม่มีลูกคนแรกแล้ว) ฉันต้องการเข้าถึงองค์ประกอบของหน้าของหน้าหลักของฉัน เป็นไปได้ไหมจากลูกคนที่สองเมื่อลูกคนแรกไม่มีอีกแล้ว
top, parent, opener (เช่นเดียวกับ window, self และ iframe) เป็นอ็อบเจกต์หน้าต่างทั้งหมด
window.opener
-> ส่งคืนหน้าต่างที่เปิดหรือเปิดหน้าต่างป๊อปอัปปัจจุบันwindow.top
-> ส่งคืนหน้าต่างที่อยู่บนสุดหากคุณกำลังใช้เฟรมนี่คือหน้าต่างเฟรมเซ็ตหากไม่ใช้เฟรมนี่จะเหมือนกับหน้าต่างหรือตัวเองwindow.parent
-> ส่งคืนเฟรมหลักของเฟรมปัจจุบันหรือ iframe เฟรมหลักอาจเป็นหน้าต่างเฟรมเซ็ตหรือเฟรมอื่นถ้าคุณมีเฟรมซ้อนกัน หากไม่ใช้เฟรมพาเรนต์จะเหมือนกับหน้าต่างปัจจุบันหรือตัวเองเมื่อคุณจัดการกับหน้าต่างป๊อปอัป window.opener มีบทบาทสำคัญเพราะเราต้องจัดการกับฟิลด์ของเพจหลักเช่นเดียวกับเพจลูกเมื่อเราต้องใช้ค่าในเพจหลักเราสามารถใช้ window.opener หรือเราต้องการข้อมูลบางอย่าง ในหน้าต่างลูกหรือหน้าต่างป๊อปอัพในขณะโหลดจากนั้นอีกครั้งเราสามารถตั้งค่าโดยใช้ window.opener