Eu gostaria de manipular o HTML dentro de um iframe usando jQuery.
Eu pensei que seria capaz de fazer isso, definindo o contexto da função jQuery como o documento do iframe, algo como:
$(function(){ //document ready
$('some selector', frames['nameOfMyIframe'].document).doStuff()
});
No entanto, isso não parece funcionar. Um pouco de inspeção mostra que as variáveis frames['nameOfMyIframe']
são, a undefined
menos que eu espere um pouco até o iframe carregar. No entanto, quando o iframe é carregado, as variáveis não estão acessíveis (eu recebo permission denied
erros de tipo).
Alguém sabe de uma solução alternativa para isso?
.contentWindow.document
que.document
sobre oiframe
elemento. Vou sugerir a alteração acima.Respostas:
Acho que o que você está fazendo está sujeito à mesma política de origem . Esse deve ser o motivo pelo qual você está recebendo erros de tipo de permissão negada .
fonte
Se
<iframe>
for do mesmo domínio, os elementos são facilmente acessíveis comoReferência
fonte
same origin policy
, nesse caso, essa resposta não é uma solução para ele.Você poderia usar o
.contents()
método jQuery.fonte
Se o iframe src for de outro domínio, você ainda poderá fazê-lo. Você precisa ler a página externa no PHP e repeti-la em seu domínio. Como isso:
iframe_page.php
Então algo como isto:
display_page.html
O exemplo acima é um exemplo de como editar uma página externa através de um iframe sem o acesso negado, etc ...
fonte
same origin policy
, e a proposta desta resposta não é imune a ela.Acho esse caminho mais limpo:
fonte
Usar
ao invés de
fonte
Você precisa anexar um evento ao manipulador de onload de um iframe e executar os js nele, para garantir que o iframe tenha terminado o carregamento antes de acessá-lo.
O procedimento acima resolverá o problema 'ainda não carregado', mas no que diz respeito às permissões, se você estiver carregando uma página no iframe de outro domínio, não poderá acessá-la devido a restrições de segurança.
fonte
Você pode usar window.postMessage para chamar uma função entre a página e seu iframe (domínio cruzado ou não).
Documentação
page.html
iframe.html
fonte
Eu prefiro usar outra variante para acessar. Do pai, você pode ter acesso à variável no iframe filho.
$
também é uma variável e você pode receber acesso apenas à sua chamadawindow.iframe_id.$
Por exemplo,
window.view.$('div').hide()
- oculte todas as divs no iframe com o ID 'view'Mas, não funciona no FF. Para melhor compatibilidade, você deve usar
$('#iframe_id')[0].contentWindow.$
fonte
Você já experimentou o clássico, aguardando a conclusão da carga, usando a função integrada do jQuery?
K
fonte
Eu crio um código de exemplo. Agora você pode entender facilmente de diferentes domínios, não pode acessar o conteúdo do iframe. Mesmo domínio, podemos acessar o conteúdo do iframe
Partilho o meu código. Por favor, execute este código, verifique a consola. Eu imprimo a imagem src no console. Existem quatro iframe, dois iframe provenientes do mesmo domínio e outros dois de outro domínio (terceiros). Você pode ver duas imagens src ( https://www.google.com/logos/doodles/2015/googles-new-logo -5078286822539264.3-hp2x.gif
e
https://www.google.com/logos/doodles/2015/arbor-day-2015-brazil-5154560611975168-hp2x.gif ) no console e também pode ver dois erros de permissão (2 Erro: permissão negada para acessar o documento da propriedade) "
... irstChild)}, conteúdo: function (a) {return m.nodeName (a, "iframe")? a.contentDocument ...
) proveniente de iframe de terceiros.
fonte
Acabei aqui procurando obter o conteúdo de um iframe sem jquery; portanto, para qualquer pessoa que procure por isso, é apenas isso:
fonte
Esta solução funciona da mesma forma que o iFrame. Eu criei um script PHP que pode obter todo o conteúdo de outro site, e a parte mais importante é que você pode aplicar facilmente seu jQuery personalizado a esse conteúdo externo. Consulte o seguinte script que pode obter todo o conteúdo do outro site e, em seguida, você pode aplicar o seu jQuery / JS personalizado. Este conteúdo pode ser usado em qualquer lugar, dentro de qualquer elemento ou página.
fonte
Para ainda mais robustez:
e
fonte