Pencere açıcısının DOM'sına çocuk penceresinden erişebilir miyim?

Jul 04, 2025

Mesaj bırakın

Selam! Ben bir pencere açıcı tedarikçisiyim ve sık sık şeylerin teknik tarafı hakkında bazı ilginç sorular soruyorum. Biraz ortaya çıkan bir soru, "Pencere açıcısının DOM'suna çocuk penceresinden erişebilir miyim?" Bu konuya dalalım ve ne olduğunu görelim.

Öncelikle, Dom'un ne olduğunu hızlı bir şekilde açıklayalım. Belge nesne modeli veya kısaca DOM, bir web sayfasındaki tüm öğelerin yapılandırılmış bir gösterimi gibidir. JavaScript'in bu öğelerle etkileşime girmesine, stillerini, içeriğini vb. Şimdi, bir pencere açıcı ve bir çocuk penceresi hakkında konuştuğumuzda, genellikle bir web sayfasının diğerinin açıldığı senaryolarla uğraşırız.

Ana sayfada (pencere açıcısı) olduğunuzu ve yeni bir sekme veya pencere açan bir düğmeyi tıkladığınızı hayal edin (çocuk penceresi). Soru şu ki, çocuk penceresi geri dönebilir ve ana sayfanın Dom'una karışabilir mi? Cevap basit bir evet ya da hayır değil.

Aynı - Origin Politikası

Buradaki büyük kural aynı - menşe politikası. Bu, web tarayıcılarında, bir sayfanın farklı kökenleri varsa başka bir sayfanın DOM'a erişmesini kısıtlayan bir güvenlik önlemidir. Origin temel olarak protokolün (HTTP veya HTTP'ler gibi), etki alanı (örneğin, www.example.com) ve bağlantı noktası numarasının bir kombinasyonudur.

Pencere açıcı ve çocuk penceresi aynı kökene sahipse, işler çok daha esnek hale gelir. Örneğin, kendi web sitenizden yeni bir pencere açarsanız, çocuk penceresi açıcı penceresinin DOM'suna erişebilir. KullanabilirsinizWindow.openerbunu yapmak için JavaScript'teki nesne. İşte basit bir örnek:

// Çocuk penceresinde (window.opener) {var openerDocument = window.opener.document; // Şimdi açıcının belgesindeki öğelere erişebilirsiniz. if (soleelement) {someelement.style.color = 'kırmızı'; }}

Ancak kökenler farklıysa, tarayıcılar erişimi engeller. Bu, kötü niyetli web sitelerinin diğer sitelerden hassas bilgileri çalmasını önlemek içindir. Örneğin, E - Ticaret sitenizden üçüncü bir taraf ödeme ağ geçidine bir çocuk penceresi açarsanız, ödeme ağ geçidinin penceresi E - Ticaret sitenizin DOM'a erişemez.

Neden pencere açıcısının DOM'suna erişmek istersiniz?

Bir pencere açıcı tedarikçisi olarak, birisinin bunu yapmak isteyebileceğinin birkaç nedenini düşünebilirim. Diyelim ki ana sayfanızda bir ürün kataloğunuz var ve bir kullanıcı bir ürünü tıkladığında, daha ayrıntılı bilgi içeren bir alt pencere açar. Çocuk penceresinin, ürünün görüntülendiğini göstermek veya "yakın zamanda görüntülenen" bir listeye eklemek için ana sayfanın DOM'unu güncellemesini isteyebilirsiniz.

Başka bir kullanım durumu bir yapılandırma aracında olabilir. Bir pencere açıcı ürünü yapılandırmak için bir çocuk penceresi açarsınız,Motorlu Kör Anahtar. Kullanıcı yapılandırmayı alt pencerede bitirdikten sonra, ana sayfayı seçilen yapılandırma seçenekleriyle güncellemek için pencere açıcının DOM'sına erişimi kullanabilirsiniz.

Çapraz İşlem - Köken Durumları

Pencere açıcının DOM'suna çapraz başlangıç ​​durumunda erişmeniz gerekiyorsa, birkaç geçici çözüm vardır. Bir seçenek, Postmessage API'sını kullanmaktır. Bu, farklı kökenlere sahip pencerelerin güvenli bir şekilde iletişim kurmasına izin verir.

Temel fikir, bir pencerenin başka bir pencereye bir mesaj gönderebilmesidir.postmessageyöntem ve alıcı pencere bu mesajları dinleyebilirWindow.AddeventListener ('Mesaj', geri arama)etkinlik.

İşte böyle çalışıyor:

// Çocuk penceresinde var hedefigin = 'https://www.example.com'; window.opener.postMessage ('Çocuk penceresinden bazı veriler', Targetorigin); // pencere açıcı penceresinde.AdDeventListener ('Mesaj', Function (Event) {if (event.origin === 'https: // child - pencere - domain.com') {console.log ('mesaj:', event.data);}});

Bu şekilde, DOM'a doğrudan erişmeden iki pencere arasında veri alışverişi yapabilirsiniz;

Pencere açıcı işinde gerçek - dünya örnekleri

Pencere açıcı işindeki bazı gerçek - dünya senaryoları hakkında konuşalım. Farklı pencere açıcıları türlerini listeleyen bir ana sayfanız olduğunu varsayalım,45mm elektronik motorVeHassas mekanik sınır motoru. Bir kullanıcı daha fazla bilgi edinmek için bir motoru tıkladığında, bir çocuk penceresi açılır.

Ana sayfanın o ürün için görünüm sayısını güncellemek için DOM erişimini (mümkünse) kullanabilirsiniz. Veya çocuk penceresinde "Sepete Ekle" düğmesi varsa, ana sayfadaki sepet simgesini güncellemek için erişimi kullanabilirsiniz.

45mm Electronic MotorSmart Home Switch

Çapraz orijin bir sorunsa, yine de Postmessage API'sını kullanabilirsiniz. Örneğin, çocuk penceresi ana sayfaya arabaya bir ürün eklendiğini belirten bir mesaj gönderebilir. Ana sayfa daha sonra araba sayısını güncelleyebilir ve bir onay mesajı gösterebilir.

Sonuçta

Peki, çocuk penceresinden pencere açıcısının Dom'una erişebilir misiniz? Aynı - menşe politikasına bağlıdır. Kökenler aynıysa,Window.openerDOM'a erişmek için nesne. Değilse, pencereler arasında iletişim kurmak için Postmessage API'sını kullanmanız gerekir.

Bir pencere açıcı tedarikçisi olarak, bu kavramları anlamak, web sitenizde daha iyi kullanıcı deneyimleri oluşturmanıza yardımcı olabilir. İster daha ayrıntılı ürün bilgileri sağlıyor ister alışveriş sürecini düzene sokuyor olsun, farklı pencereler arasında etkileşime girebilmek büyük bir fark yaratabilir.

Yüksek kaliteli pencere açıcıları, motorlar veya anahtarlar için pazardaysanız ve ürünlerimizin projelerinize nasıl uyabileceği hakkında daha fazla bilgi edinmek istiyorsanız, sohbet etmek isteriz. Bir tedarik tartışması başlatmak için bize ulaşın ve ihtiyaçlarınız için en iyi çözümleri bulmak için birlikte çalışalım.

Referanslar

  • MDN Web Dokümanlar - Aynı - Köken Politikası
  • MDN Web Dokümanlar - Window.PostMessage ()
  • W3Schools - JavaScript Pencere Nesnesi