Supondo que não tenho controle sobre o conteúdo do iframe, existe alguma maneira de detectar uma alteração de src na página pai? Algum tipo de carga, talvez?
Meu último recurso é fazer um teste de intervalo de 1 segundo se o iframe src for o mesmo de antes, mas fazer essa solução hacky seria péssimo.
Estou usando a biblioteca jQuery, se ajudar.
javascript
jquery
iframe
onload
Matrym
fonte
fonte
src
propriedade mudará quando um link no iframe for clicado? Não tenho certeza disso - se eu tivesse que adivinhar, se diria "não". Não são maneiras de propriedades do monitor (no Firefox, pelo menos, AFAIK), mas eu não tenho certeza se ele vai ser de alguma utilidade neste caso.src
atributo no DOM não muda nas versões mais recentes do FireFox ou Safari. @ A resposta de Michiel abaixo é tão boa quanto pude chegar até agora.Respostas:
Você pode usar o
onLoad
evento, como no exemplo a seguir:O alerta será exibido sempre que o local dentro do iframe for alterado. Ele funciona em todos os navegadores modernos, mas pode não funcionar em alguns navegadores mais antigos, como o IE5 e o Opera. ( Fonte )
Se o iframe estiver mostrando uma página no mesmo domínio do pai , você poderá acessar o local com
contentWindow.location
, como no exemplo a seguir:fonte
this.contentWindow.location.href
receboPermission denied to access property 'href'
this.contentWindow.location
está disponível para outros domínios. Eventhis.contentWindow.location.href
está disponível para outros domínios, mas apenas para escrita. No entanto, a leiturathis.contentWindow.location.href
é limitada ao mesmo domínio.Resposta baseada em JQuery <3
Conforme mencionado pelo subharb, a partir do JQuery 3.0, isso precisa ser alterado para:
https://jquery.com/upgrade-guide/3.0/#breaking-change-load-unload-and-error-removed
fonte
if (counter > 1) { // do something on iframe actual change }
(contra assumindo foi definido como 0 no início)Se você não tem controle sobre a página e deseja observar algum tipo de alteração, o método moderno é usar
MutationObserver
Um exemplo de seu uso, observando o
src
atributo mudar de umiframe
Saída após 3 segundos
On jsFiddle
A resposta postada aqui, pois a pergunta original foi encerrada como duplicata desta.
fonte
observe
. Este é apenas um exemplo.Nota: O snippet funcionaria apenas se o iframe estiver com a mesma origem.
Outras respostas propuseram o
load
evento, mas ele é acionado após o carregamento da nova página no iframe. Pode ser necessário ser notificado imediatamente após a alteração do URL , não após o carregamento da nova página.Aqui está uma solução JavaScript simples:
Isso rastreará com êxito as
src
alterações de atributo, bem como quaisquer alterações de URL feitas no próprio iframe.Testado em todos os navegadores modernos.
Eu fiz uma essência com esse código também. Você pode verificar minha outra resposta também. Ele se aprofundou um pouco na maneira como isso funciona.
fonte
O iframe sempre mantém a página pai, você deve usá-lo para detectar em qual página você está no iframe:
Código HTML:
Js:
fonte
Desde a versão 3.0 do Jquery, você pode receber um erro
O que pode ser facilmente corrigido fazendo
fonte
Aqui está o método usado nos módulos Commerce SagePay e Commerce Paypoint Drupal, que basicamente se comparam
document.location.href
ao valor antigo, carregando primeiro seu próprio iframe, depois o externo.Então, basicamente, a idéia é carregar a página em branco como um espaço reservado com seu próprio código JS e formulário oculto. O código JS pai enviará o formulário oculto onde
#action
aponta para o iframe externo. Depois que o redirecionamento / envio acontece, o código JS que ainda está sendo executado nessa página pode rastrear suasdocument.location.href
alterações de valor.Aqui está o exemplo de JS usado no iframe:
E aqui está o JS usado na página pai:
Em seguida, na página de destino temporária em branco, é necessário incluir o formulário que será redirecionado para a página externa.
fonte