var iframe = document.getElementById('iframeId');var innerDoc =(iframe.contentDocument)? iframe.contentDocument : iframe.contentWindow.document;
Você poderia simplesmente escrever:
var iframe = document.getElementById('iframeId');var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
e o primeiro documento interno válido será retornado.
Depois de obter o documento interno, você pode acessar seus internos da mesma maneira que acessaria qualquer elemento em sua página atual. ( innerDoc.getElementById... etc)
IMPORTANTE: verifique se o iframe está no mesmo domínio, caso contrário você não poderá obter acesso aos seus internos. Isso seria script entre sites.
Ótima resposta. Você sabia que pode fazer: var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // mais legível e significa o mesmo
David Snabel-Caunt
5
Já vi pessoas confusas com isso mais do que operadores ternários. Eles parecem não saber que o primeiro válido é retornado.
geowa4
5
Na verdade, como eu editei a resposta para incluí-lo, o cara por cima do meu ombro me perguntou o que fez ...
geowa4
12
Provavelmente melhor para educar do que o uso de código mais complexo para a simplicidade :)
David Snabel-Caunt
1
@JellicleCat: Qualquer maneira de contornar isso é uma maneira de fazer "Cross-site request forgery", também conhecido como ataque de "one-click" ou "equitação sessão"
CSharper
12
Não se esqueça de acessar o iframe após o carregamento . Maneira antiga, mas confiável, sem jQuery:
Isso está chamando uma função de um iFrame, não obtendo uma referência ao elemento.
Nick Mitchell
3
As respostas acima deram boas soluções usando Javscript. Aqui está uma solução simples do jQuery:
$('#iframeId').contents().find('div')
O truque aqui é o .contents()método do jQuery , ao contrário.children() que só pode obter elementos HTML, .contents()pode obter nós de texto e elementos HTML. É por isso que é possível obter o conteúdo do documento de um iframe usando-o.
Outras leituras sobre o jQuery .contents(): .contents ()
Observe que o iframe e a página precisam estar no mesmo domínio.
Se o iframe não estiver no mesmo domínio, de modo que você não possa obter acesso a seus internos a partir do pai, mas poderá modificar o código-fonte do iframe, poderá modificar a página exibida pelo iframe para enviar mensagens para a janela pai, o que permite você compartilhar informações entre as páginas. Algumas fontes:
Não se esqueça de acessar o iframe após o carregamento . Maneira antiga, mas confiável, sem jQuery:
fonte
CallYourFunction()
é função dentro da página e essa ação ação nelafonte
As respostas acima deram boas soluções usando Javscript. Aqui está uma solução simples do jQuery:
O truque aqui é o
.contents()
método do jQuery , ao contrário.children()
que só pode obter elementos HTML,.contents()
pode obter nós de texto e elementos HTML. É por isso que é possível obter o conteúdo do documento de um iframe usando-o.Outras leituras sobre o jQuery
.contents()
: .contents ()Observe que o iframe e a página precisam estar no mesmo domínio.
fonte
Nenhuma das outras respostas estava funcionando para mim. Acabei criando uma função dentro do meu iframe que retorna o objeto que estava procurando:
Então você chama essa função assim para recuperar o elemento:
fonte
Se o iframe não estiver no mesmo domínio, de modo que você não possa obter acesso a seus internos a partir do pai, mas poderá modificar o código-fonte do iframe, poderá modificar a página exibida pelo iframe para enviar mensagens para a janela pai, o que permite você compartilhar informações entre as páginas. Algumas fontes:
fonte
O código abaixo o ajudará a descobrir dados iframe.
fonte