Kapan menggunakan window.opener / window.parent / window.top


94

Dalam JavaScript, kapan harus menggunakan window.opener/ window.parent/ window.top?


3
ada juga window.self yang mengacu pada jendela yang sama :)
CodingOnSteroid

Jawaban:


167
  • window.openermengacu pada jendela yang dipanggil window.open( ... )untuk membuka jendela tempat jendela itu dipanggil
  • window.parentmengacu pada induk dari jendela di <frame>atau<iframe>
  • window.topmerujuk ke jendela paling atas dari jendela yang bersarang di satu atau beberapa lapisan <iframe>sub-jendela

Itu akan menjadi null(atau mungkin undefined) ketika mereka tidak relevan dengan situasi jendela rujukan. ("Jendela rujukan" berarti jendela yang konteksnya kode JavaScript dijalankan.)


1
Terima kasih @pointy atas tanggapannya. Saya memiliki halaman utama yang membuka seorang anak menggunakan window.open()setelah halaman mengirimkan. Sekarang jendela anak ini membuka jendela anak lain dengan window.open()penutup yang sama . Sekarang ketika saya mengirimkan anak kedua saya (anak pertama tidak ada lagi), saya ingin mengakses elemen halaman halaman utama saya. Apakah ini mungkin dari anak kedua ketika yang pertama tidak ada lagi?
Sriram

4
@Sriram: Itu jenis informasi yang Anda butuhkan untuk dimasukkan ke dalam pertanyaan Anda, sehingga orang tahu apa masalah yang Anda benar-benar mencoba untuk memecahkan.
josh3736

5
@Sriram Anda harus mengambil window.opener.openersebelum halaman perantara menghilang.
Pointy

24

Saya pikir Anda perlu menambahkan beberapa konteks pada pertanyaan Anda. Namun, informasi dasar tentang hal-hal ini dapat ditemukan di sini:

window.opener https://developer.mozilla.org/en-US/docs/Web/API/Window.opener

Saya sering menggunakan window.opener saat membuka jendela baru yang bertindak sebagai dialog yang membutuhkan masukan pengguna, dan perlu meneruskan informasi kembali ke jendela utama. Namun hal ini dibatasi oleh kebijakan asal, jadi Anda perlu memastikan konten dari dialog dan jendela pembuka dimuat dari asal yang sama.

window.parent https://developer.mozilla.org/en-US/docs/Web/API/Window.parent

Saya telah menggunakan ini sebagian besar saat bekerja dengan IFrames yang perlu berkomunikasi dengan objek jendela yang berisi mereka.

window.top https://developer.mozilla.org/en-US/docs/Web/API/Window.top

Ini berguna untuk memastikan Anda berinteraksi dengan jendela browser tingkat atas. Anda dapat menggunakannya untuk mencegah situs lain melakukan iframing pada situs Anda, antara lain.

Jika Anda menambahkan lebih banyak detail pada pertanyaan Anda, saya dapat memberikan contoh lain yang lebih relevan.

PEMBARUAN: Ada beberapa cara untuk menangani situasi Anda.
Anda memiliki struktur berikut:

  • Jendela utama
    • Dialog 1
      • Dialog 2 Dibuka Dengan Dialog 1

Ketika Dialog 1 menjalankan kode untuk membuka Dialog 2, setelah membuat Dialog 2, minta dialog 1 menyetel properti pada Dialog 2 yang mereferensikan pembuka Dialog1.

Jadi jika "childwindow" adalah variabel Anda untuk objek jendela dialog 2, dan "jendela" adalah variabel untuk objek jendela Dialog 1. Setelah membuka dialog 2, tetapi sebelum menutup dialog 1 buatlah tugas seperti ini:

childwindow.appMainWindow = window.opener

Setelah membuat tugas di atas, tutup dialog 1. Kemudian dari kode yang berjalan di dalam dialog2, Anda harus dapat menggunakan window.appMainWindowreferensi jendela utama, objek jendela.

Semoga ini membantu.


Terima kasih @Mark atas tanggapannya. Saya memiliki halaman utama yang membuka seorang anak menggunakan window.open()setelah halaman mengirimkan. Sekarang jendela anak ini membuka jendela anak lain dengan window.open()penutup yang sama . Sekarang ketika saya mengirimkan anak kedua saya (anak pertama tidak ada lagi), saya ingin mengakses elemen halaman halaman utama saya. Apakah ini mungkin dari anak kedua ketika yang pertama tidak ada lagi?
Sriram

jawaban yang diperbarui. @ josh3736 - Saya tidak melihat bagaimana komentar itu berguna. Saya tidak menyarankan siapa pun untuk mendapatkan sertifikasi w3schools. Semua orang di sini tahu cara menggunakan Google dan mendapatkan definisi dasar dari window.opener, window.top, dan window.parent. Gunakan tautan di atas atau temukan referensi baru, tetapi hampir tidak ada gunanya menduplikasi informasi yang hanya mendefinisikan properti ini di sini.
Mark At Ramp51

Penjelasan sangat membantu @ MarkAtRamp51 Terima kasih!
Sriram

3
Tautan tersebut menjelaskan - dengan sangat rinci - apa yang salah dengan w3schools. Intinya adalah untuk menghindari mempromosikan atau menautkan ke (dan dengan demikian meningkatkan Google PageRank dari) w3schools sebagai sumber informasi yang berwibawa. W3S menyebarkan informasi yang buruk, dan sebagian dari masalahnya adalah begitu banyak orang yang menautkan ke informasi yang buruk itu. Lebih baik menautkan ke sumber informasi yang lebih andal, seperti MDN .
josh3736

5

top, parent, opener (serta window, self, dan iframe) adalah objek jendela.

  1. window.opener -> mengembalikan jendela yang membuka atau meluncurkan jendela popup saat ini.
  2. window.top -> mengembalikan jendela paling atas, jika Anda menggunakan bingkai, ini adalah jendela frameset, jika tidak menggunakan bingkai, ini sama dengan jendela atau diri.
  3. window.parent-> mengembalikan bingkai induk dari bingkai atau iframe saat ini. Bingkai induk dapat berupa jendela rangkaian bingkai atau bingkai lain jika Anda memiliki bingkai bersarang. Jika tidak menggunakan bingkai, induknya sama dengan jendela saat ini atau diri sendiri

1

ketika Anda berurusan dengan popup window.opener memainkan peran penting, karena kita harus berurusan dengan bidang halaman induk dan juga halaman anak, ketika kita harus menggunakan nilai pada halaman induk kita dapat menggunakan window.opener atau kita ingin beberapa data pada jendela anak atau jendela popup pada saat memuat, maka kita dapat mengatur nilai lagi menggunakan window.opener

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.