2013-03-11 13 views
6

Ho un iframe che inietta nelle pagine, chiamato "helper". Quindi, a causa della stessa politica di origine ho bisogno di impostare il dominio iframe lo stesso è il dominio della finestra genitore. Ma non posso accedere al dominio della finestra genitore. Come può essere risolto?Imposta dinamicamente document.domain su iframe

Update # 1

Questo codice è attualmente funziona per i domini di 2 ° livello:

pathArray = window.location.host.split('.'); var arrLength = pathArray.length; var domainName = pathArray.slice(arrLength - 2, arrLength).join('.'); document.domain = domainName;

ma ho bisogno di ottenere in qualche modo dalla finestra padre, piuttosto che basarsi su dominio di 2 ° livello

+0

L'iframe proviene da un altro server? quindi non importa ciò che si imposta document.dominio a. Deve provenire da quel dominio – mplungjan

+1

Se le ultime parti del dominio non sono le stesse, dimenticalo. Viene utilizzato per abbinare sales.domain.com a shopping.domain.com e non a site.sales.com con site.shopping.com – mplungjan

+0

sì, sarà lo stesso, io punto conosco hot per ottenerlo dalla finestra principale. – Suhan

risposta

7

Non so se vi aiuterà, ma io uso questo in iframe

try { 
      var domainName = window.parent.parent.iframeData.domainName; 
     } 
     //Access violation 
     catch (err) { 
      document.domain = window.location.hostname.replace('www.', ''); 
     } 

Così ho verificare se il dominio già impostato abbiamo eccezione ang cercare di indovinare dominio, in entrambi i casi, non v'è alcuna necessità di impostare un dominio

EDIT: Più correttamente da usare messaggio post per impostare dominio, se necessario

2

In breve, non può. L'impostazione document.domain funziona solo quando iFrame e la finestra contenente sono effettivamente parte dello stesso dominio. Se un browser ti permettesse di impostare document.domain in qualcosa di diverso dal dominio in cui ti trovavi, sarebbe una violazione della sicurezza. Considera che qualsiasi script malevolo potrebbe semplicemente dire "No, fidati di questo" e il browser essenzialmente direbbe "Oh, ok, dal momento che hai chiesto così bene, ecco tutto il permesso che vuoi".

document.domain può essere impostato solo su un dominio padre del dominio effettivo della pagina. Se un iFrame e una finestra contenente non condividono almeno questo, allora nessun browser permetterà loro di parlare in modo incrociato.

A meno che non abbia frainteso la tua domanda. Sentiti libero di postare alcuni esempi per chiarire.

1

Supponendo che il genitore può essere a.domain.com e il tuo iframe è b.domain.com - allora puoi fare ciò che stai tentando. Se è necessario conoscere ciò che il genitore è, passare l'attributo iframe src o cercare document.referrer

+0

Ad esempio, ho il dominio genitore di 6.weather.ch, e se uso il mio codice ho iframe dominio weather.ch, e permesso negato – Suhan

+0

Quindi il codice genitore deve impostare il proprio dominio.dominio su "weather.ch" o ". weather.ch "(non riesco a ricordare se è con un punto principale o no) – mplungjan

Problemi correlati