Quero chamar uma função após o carregamento de um documento, mas o documento pode ou não ter terminado o carregamento ainda. Se ele carregou, posso chamar a função Se NÃO foi carregado, posso anexar um ouvinte de evento. Não consigo adicionar um listener de eventos depois que o onload já foi acionado, pois não será chamado. Então, como posso verificar se o documento foi carregado? Eu tentei o código abaixo, mas ele não funciona totalmente. Alguma ideia?
var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if (body && body.readyState == 'loaded') {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
window.addEventListener('load', DoStuffFunction, false);
} else {
window.attachEvent('onload', DoStuffFunction);
}
}
javascript
events
onload
addeventlistener
Marcos
fonte
fonte
Respostas:
Não há necessidade de todo o código mencionado pelos galambalazs. A maneira entre navegadores de fazê-lo em JavaScript puro é simplesmente testar
document.readyState
:É também assim que o jQuery faz isso.
Dependendo de onde o JavaScript está carregado, isso pode ser feito dentro de um intervalo:
De fato,
document.readyState
pode ter três estados:Portanto, se você só precisa que o DOM esteja pronto, verifique
document.readyState === "interactive"
. Se você precisar que a página inteira esteja pronta, incluindo imagens, verifiquedocument.readyState === "complete"
.fonte
document.readyState == "complete"
isso significa que tudo, incluindo imagens, foi carregado.document.readyState
para garantir que a função seja iniciada após o DOM ser analisado ou mais tarde, dependendo de quando foi chamado. Existe um evento para interatividadereadyState
?/loaded|complete/.test(document.readyState)
. Alguns navegadores configuradosdocument.readyState
para "carregado" em vez de "completo". Além disso, document.readyState NÃO garante que as fontes tenham sido carregadas, não há uma maneira realmente boa de testar isso sem um plug-in.document.onreadystatechange
? Isso parece mais otimizado se os navegadores suportarem. stackoverflow.com/questions/807878/…document.readyState !== "loading"
, para o estado "DOM ready". Isso evita que surjam problemas se areadyState
verificação for atrasada por algum motivo (após o estado "interativo").Não há necessidade de uma biblioteca. O jQuery usou esse script por um tempo, btw.
http://dean.edwards.name/weblog/2006/06/again/
fonte
init
não será executado se esse código que você postou for incluído após o carregamento da página, que é o ponto do OP: ele / ela não pode controlar quando o script está incluído. (note que apenas osetInterval
ramo vai funcionar)Você provavelmente deseja usar algo como jQuery, que facilita a programação JS.
Algo como:
Parece fazer o que você procura.
fonte
ready()
for chamado após o carregamento do documento, a função transmitida será executada imediatamente.fonte
document.loaded
é sempre indefinidobody.readyState === 'loaded'
Se você realmente deseja que esse código seja executado no carregamento , não no dom já (ou seja, você também precisa que as imagens sejam carregadas), infelizmente a função ready não faz isso por você. Eu geralmente apenas faço algo assim:
Inclua no documento javascript (ou seja, sempre chamado antes do carregamento do onload):
Então seu código:
(Ou o equivalente em sua estrutura de preferência.) Eu uso esse código para fazer o precaching de javascript e imagens para páginas futuras. Como o material que estou recebendo não é usado para esta página, não quero que ela tenha precedência sobre o rápido download de imagens.
Pode haver uma maneira melhor, mas ainda não a encontrei.
fonte
O Mozila Firefox diz que
onreadystatechange
é uma alternativa aoDOMContentLoaded
.No
DOMContentLoaded
documento do Mozila diz:Acho que o
load
evento deve ser usado para um carregamento completo de documentos + recursos.fonte
O exemplo acima com o JQuery é a maneira mais fácil e mais usada. No entanto, você pode usar javascript puro, mas tente definir esse script na cabeça para que seja lido no início. O que você está procurando é
window.onload
evento.Abaixo está um script simples que eu criei para executar um contador. O contador então pára após 10 iterações
fonte
Tente o seguinte:
fonte
Eu tenho outra solução, meu aplicativo precisa ser iniciado quando um novo objeto do MyApp é criado, portanto, parece:
está funcionando em todos os navegadores, que eu sei.
fonte