2015-01-01 20 views
5

Piszę piksel JavaScript, który będzie wyświetlany z kreacją AD na stronach wydawcy. Ten AD będzie zawarty w elemencie iframe o różnych domenach (czasami wielu poziomach) w witrynie wydawcy. Tak więc strona wydawca wygląda toOkreślenie adresu URL okna najwyższego poziomu z wielopoziomowej domeny iframe przekierowania

hosta (wydawcy) miejscu

<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> 

Jeśli reklamodawca chce wiedzieć, na co wszystkie strony jego/jej AD jest obsługiwane coraz to musimy wiedzieć stronę gospodarza adres URL.

Jak wspomniano here możemy uzyskać adres URL strony nadrzędnej używając document.referrer jak ten

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

ale działa tylko dla domeny, która jest tylko o jeden poziom w górę. Nie możemy osiągnąć najwyższego poziomu, ponieważ nie mamy żadnej kontroli na elemencie iframe "domain1.com". Jest to jeden problem, który ludzie próbują rozwiązać przez długi czas i jest wiele pytań już na SO, który pyta dokładnie to samo. Ale proszę o to ponownie z tego powodu article. Twierdzi, że ma opatentowane rozwiązanie, które może wykryć adres URL okna najwyższego poziomu. Oto fragment z bloga

ratownik był to technika opracowana na Adsafe: Kluczem do rozwiązania była możliwość zapoznania się z adresu górnej ramce, która była gospodarzem reklamy (*). Wykrywaliśmy pornografię, ponieważ reklamy, które miały pojawić się w witrynie "czystego wydawcy", pojawiły się w ramce witryny z pornografią: . Pomyśl o HGTV jako o ilustracyjnym, ale nie prawdziwym przykładzie takiego "czystego wydawcy".

Czy istnieje sposób, aby wykryć adres URL okna najwyższego poziomu?

podobne pytanie: Top window's URL form inside of multiple nested cross-domain iFrames

Odpowiedz

1

Mam rozwiązanie, aby uzyskać domenę zarówno w Chrome i Opera (w wielu zagnieżdżonych iframe cross-Domain), choć niestety nie jest możliwe w innych przeglądarkach.

Można użyć właściwości 'window.location.ancestorOrigins.

Ten fragment kodu działa w przeglądarce, aby uzyskać możliwie najbliżej adres URL strony: https://gist.github.com/ocundale/281f98a36a05c183ff3f.js

1

Jeśli jesteś w tej samej domenie, można uzyskać dostęp górną ramkę za pomocą

window.top.location.href 

To łatwa odpowiedź.

Jeśli zagnieżdżone element iframe znajduje się w innej domenie niż najwyższa domena, wystąpi ten sam problem zasad dotyczących pochodzenia, co oznacza, że ​​ramki hostowane w innej domenie nie mogą się ze sobą komunikować ze względów bezpieczeństwa.

Jeśli kontrolować tworzenie zagnieżdżonych ramy, jeden obejście jest przekazać ciąg kwerendy parametr wskazujący na pod-ramki.

Innym sposobem jest użycie HTML5 postMesssage do komunikowania się między ramkami, ale znowu, że wymaga, aby mieć kontrolę na obu domenach.

Nadzieję, że pomaga.