2015-01-01 19 views
5

Sto scrivendo un pixel JavaScript che verrà pubblicato con creatività AD nelle pagine dei publisher. Questo annuncio sarà contenuto in un iframe di dominio incrociato (a volte molti livelli) in un sito di un editore. Così la pagina del publisher si presenta cosìDetermina l'url della finestra di livello superiore da un iframe a più domini incrociati

ospite sito (editore)

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

Se un inserzionista vuole sapere su ciò che tutte le pagine la sua/il suo AD è sempre servito poi abbiamo bisogno di conoscere la pagina host url.

Come accennato here possiamo ottenere la pagina padre URL utilizzando document.referrer come questo

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

ma funziona solo per il dominio che è solo un livello superiore. Non possiamo raggiungere il livello più alto dal momento che non abbiamo alcun controllo su iframe "domain1.com". Questo è un problema che le persone stanno cercando di risolvere da molto tempo e ci sono già molte domande su SO che richiede esattamente la stessa cosa. Ma lo sto chiedendo di nuovo a causa di questo article. Afferma di avere una soluzione brevettata in grado di rilevare l'url della finestra di livello superiore. Ecco un estratto dal blog

Il salvagente era una tecnica sviluppata presso AdSafe: la chiave per la soluzione era la capacità di leggere l'indirizzo del frame superiore che era che ospita l'annuncio (*). Stavamo rilevando il porno perché gli annunci che erano apparivano all'interno di un sito "clean editore" apparivano nella cornice di un sito porno. Pensa a HGTV come illustrativo, ma non al vero, esempio di un "editore pulito".

Quindi, c'è un modo per rilevare l'URL della finestra di livello superiore?

domanda simile: Top window's URL form inside of multiple nested cross-domain iFrames

risposta

1

Ho una soluzione per voi per ottenere il dominio sia in Chrome e Opera, (in più iframe cross-domain nidificati), anche se purtroppo non è possibile in altri browser.

È possibile utilizzare la proprietà 'window.location.ancestorOrigins'.

Questo snippet di codice funzionerà su browser per ottenere l'URL della pagina più vicino possibile per voi: https://gist.github.com/ocundale/281f98a36a05c183ff3f.js

1

Se siete sullo stesso dominio, è possibile accedere al frame superiore utilizzando

window.top.location.href 

Questa è la risposta facile.

Se l'iframe nidificato si trova in un dominio diverso rispetto al dominio principale, si verificherà lo stesso problema di politica di origine, ovvero che i frame ospitati su domini diversi non possono comunicare tra loro per motivi di sicurezza.

Se si controlla la creazione del frame nidificato, una soluzione è passare un parametro stringa di query che punta al frame nidificato.

Un altro modo è utilizzare HTML5 postMesssage per comunicare tra i frame, ma di nuovo, che richiede il controllo su entrambi i domini.

Spero che questo aiuti.