Cross Domain JavaScript posizione del padre impostazione errore firefox

Ecco il caso:
pagina A contiene iframe B, B contiene iframe C, A e B sono sotto lo stesso dominio, C sotto l'altro.
C cerca di ripristinare la posizione del genitore B con informazioni aggiuntive seguendo "#" per risolvere la comunicazione cross domain utilizzando l'identificazione di Fragment Id.

IE6 / 7/8 funziona bene con questo caso, mentre Firefox blocca l' impostazione parent.location con il messaggio di errore [ Access to property denied "code:" 1010 ]. Ma se B è la window superiore, il che significa che non esiste A, anche Firefox vive.

È strano a me … Potresti aiutare?

Grazie!

Storicamente, qualsiasi window potrebbe modificare la posizione di qualsiasi altra window. Ciò si è rivelato un problema perché, tra l'altro, significava l'incorporazione di un iframe di login in una window non sicura (perché un sito dannoso potrebbe sostituire l'iframe di accesso con una versione spoofed). Nel tempo sono state applicate ulteriori restrizioni alle modifiche di posizione alle windows del browser finora, quando l' HTML5 e la maggior parte dei browser hanno raggiunto un accordo comune sulla politica degli antenati . In poche parole, parafrasando la specifica HTML5, una window A può cambiare la posizione di un'altra window B iff:

  • le posizioni di A e B hanno la stessa origine, vale a dire che hanno lo stesso schema, host e port (http, stackoverflow.com, 80 per esempio) o
  • B è una window di primo livello e A è una window in un fotogramma annidato ad una certa profondità all'interno di B (figlio diretto, figlio di un bambino, ecc.) Oppure
  • B è una window aperta usando window.open e A può cambiare la posizione della window che ha aperto B (quindi B è un popup aperto da A, da una window popup aperta da A o da una profondità maggiore) oppure
  • B non è una window di primo piano, ma la sua window principale o la window principale del suo genitore o ad una sum simile di parentesi le posizioni di quella window e di A sono di origine uguale

(La stessa origine è più complicata di questa, ma la descrizione incorporata sopra trova la sua essenza e copre i casi più comuni.)

In base a questa politica, C può cambiare la posizione di A e A può cambiare la posizione di B o C, ma C non può cambiare la posizione di B. Per risolvere questo problema, è necessario modificare la posizione della pagina A in qualcosa che cambia B come opportuno; alternativamente, potresti chiedere alla tua pagina B di cambiare la propria posizione .

Speriamo che questo sia informativo, se non necessariamente utile. Il model di protezione del browser non è stato tanto progettato quanto evoluto , e solo con i recenti lavori in HTML5 è in realtà inesatta in modo giusto per affrontare queste incoerenze tra browser.

Tutto quello che ha detto, sono sorpreso IE7 e IE8 lavoro per te – era la mia comprensione la politica di cui sopra era fondamentalmente basata sulla politica IE7 implementata.

Da C puoi accedere alla window di B usando window.top .

Prova, var B = window.top; B.location = "..."; var B = window.top; B.location = "...";