Bem, eu tenho um IFrame, que chama uma mesma página de domínio. Meu problema é que desejo acessar algumas informações desse iframe pai a partir desta página chamada (do JavaScript). Como posso acessar este Iframe?
Detalhes: Existem vários iframes como este, que podem ter a mesma página carregada, porque estou programando um ambiente Windows. Pretendo fechar esse Iframe, é por isso que preciso saber o que devo fechar de dentro dele. Eu tenho uma matriz mantendo referências a esses iframes.
EDIT: Existem iframes gerados dinamicamente
javascript
iframe
José Leal
fonte
fonte
Respostas:
Também é possível definir nome e ID com valores iguais
então você poderá usar o próximo código na página filho
fonte
iframe
tamanho muito pequeno. Mas por que isso funciona?window.name
retorna uma string. O que há de diferente em usar dowindow.name
que apenas passar o nome do ID como uma string que não funciona.)?Basta ligar
window.frameElement
da sua página emoldurada. Se a página não estiver em um quadro,frameElement
seránull
.A outra maneira (obter o elemento da janela dentro de um quadro é menos trivial), mas por uma questão de integridade:
fonte
window.frameElement
retornanull
quando window e iframe têm domínios diferentes, como mensagens de origem cruzada.Eu recomendaria o uso da API postMessage .
No seu iframe, ligue para:
Na página você está incluindo o iframe, pode ouvir eventos como este:
A propósito, também é possível fazer chamadas para outras janelas, e não apenas iframes.
Leia mais sobre a API postMessage no blog de John Resigs aqui
fonte
<iframe>
conteúdo não precisa saber nada sobre os pais e vice-versa. Eles só precisam obedecer ao contrato de mensagem simples. Impressionante!'*'
.'*'
em clientes. Todas as outras soluções dão erro em um navegador Chrome ao tratar os arquivos na pasta clientes como não sendo a mesma origem, porque um servidor não está configurado. Esta é a melhor e única solução: dyn-web.com/tutorials/iframes/postmessagePergunta antiga, mas eu só tive esse mesmo problema e encontrei uma maneira de obter o iframe. É simplesmente uma questão de iterar pela matriz de quadros [] da janela pai e testar o contentWindow de cada quadro na janela em que seu código está sendo executado. Exemplo:
Ou, usando jQuery:
Esse método economiza a atribuição de um ID a cada iframe, o que é bom no seu caso, pois eles são criados dinamicamente. Não consegui encontrar uma maneira mais direta, já que você não pode obter o elemento iframe usando window.parent - ele vai diretamente para o elemento da janela pai (ignorando o iframe). Então, percorrê-los parece a única maneira, a menos que você queira usar IDs.
fonte
você pode usar
parent
para acessar a página pai. Portanto, para acessar uma função, seria:fonte
Depois que o id do iframe estiver definido, você poderá acessar o iframe no documento interno, como mostrado abaixo.
Funciona bem no IE, Chrome e FF.
fonte
var iframe = frameElement
Talvez apenas use
no iframe para obter o quadro de chamada / janelas. Se você tinha vários quadros de chamada, pode usar
fonte
Tente isso, em seu quadro pai, configure IFRAMEs assim:
Observe que o ID de cada quadro é passado como uma âncora no src.
então, em seu html interno, você pode acessar o ID do quadro em que ele é carregado via location.hash:
você pode acessar parent.document.getElementById () para acessar a tag iframe de dentro do iframe
fonte
fonte