2015-01-01 18 views
5

Yayıncı sayfalarında reklam öğesiyle sunulacak bir JavaScript pikseli yazıyorum. Bu AD, bir yayıncı sitesinde çapraz etki alanı iframe (bazen birçok seviye) içerecektir. Bir reklamveren onun/onu AD servis oluyor tüm sayfalar o zaman ev sahibi sayfasını bilmeniz gerekenler üzerinde bilmek isterse yayıncı sayfası buÇok düzeyli bir etki alanı iframe öğesinden üst düzey pencerenin URL'sini belirle

konak (yayıncı) site gibi

<html> 
    <iframe src="http://domain1.com" name="first_level_iframe"> 
     <iframe src="http://domain2.com" name="second_level_iframe"> 
      <!--The script I want to write will be hosted here--> 
     </iframe> 
    </iframe> 
</html> 

görünüyor Yani url.

biz bu

var url = (window.location != window.parent.location) ? document.referrer: document.location; 

gibi document.referrer kullanarak ana sayfa url alabilirsiniz ancak yalnızca tek bir seviye yukarı bulunduğu alan için çalışıyor here bahsetti. "Domain1.com" iframe üzerinde herhangi bir kontrolümüz olmadığı için en üst seviyeye kadar ulaşamayız. Bu, insanların uzun bir süredir çözmeye çalıştıkları bir sorundur ve SO'da zaten aynı olan birçok soru vardır. Bu article nedeniyle tekrar soruyorum. Üst düzey pencere URL'sini algılayabilen patentli bir çözüme sahip olduklarını iddia ediyor. İşte cankurtaran AdSafe'ten geliştirilen bir teknik olduğunu blogda

bir alıntıdır: çözüm anahtarı reklamı (*) barındıran oldu üst çerçevenin adresini okumak için yeteneği oldu. "Temiz yayıncı" sitesinde görünmesi gereken reklamının bir porno web sitesinin çerçevesi içinde görünmesi nedeniyle pornografi tespit edildi. HGTV'yi bir açıklayıcı, olarak düşünün, ancak böyle bir "temiz yayıncının" gerçek örneği değil.

Yani, üst düzey pencere URL'lerini algılamanın bir yolu var mı?

Benzer Soru: Aynı etki alanında ise Top window's URL form inside of multiple nested cross-domain iFrames

cevap

1

Etki alanı hem Chrome hem de Opera'da (birden çok iç içe geçmiş alanlar arası iframe'ler) edinmeniz için bir çözümüm var, ancak ne yazık ki diğer tarayıcılarda mümkün değil.

'window.location.ancestorOrigins' özelliğini kullanabilirsiniz.

Bu kod parçacığı, sizin için mümkün olan en yakın sayfa URL'sini almak için çapraz tarayıcıyı çalıştıracaktır: https://gist.github.com/ocundale/281f98a36a05c183ff3f.js

1

, kolay cevabı var

window.top.location.href 

kullanarak üst çerçeveyi erişebilirler.

Yuvalanmış iframe, üst etki alanınızdan farklı bir etki alanındaysa, o zaman aynı kaynak ilkesi sorunuyla karşılaşırsınız. Bu, farklı etki alanında barındırılan karelerin güvenlik nedenleriyle birbirleriyle iletişim kuramayacağı anlamına gelir.

Yuvalanmış çerçevenin oluşturulmasını denetlerseniz, bir çözüm, iç içe çerçevenize işaret eden bir sorgu dizesi parametresini iletmektir.

Çerçeveler arasında iletişim kurmak için HTML5 postMesssage'i kullanmanın başka bir yolu da vardır; ancak yine de, her iki alanda da denetiminizin olması gerekir.

Bu yardımcı olur umarım.

İlgili konular