Intermitente Erro de tempo de no IE7: Ocorreu na linha 0, Objeto necessário? Hã?
-
22-07-2019 - |
Pergunta
Um site que eu estou trabalhando em exibe um erro de execução intermitente, mas apenas no IE7 e 8. Este erro aparecem quase aleatoriamente (como, pode aparecer no tempo inicial de um carregamento da página ou pode não aparecer até que a página nth carga). O erro diz que ocorreu na linha: 0 e o erro é "Objeto necessário". Eu estou usando jQuery em todo o site, mas incapacitante que em pedaços (isto é, os vários plugins e outros enfeites) não resolveu o problema. Eu ainda estou acionando sobre ele, mas quero começar este "Help!" fora em stackoverflow no caso de alguém tem lidado com algo assim antes.
A intermitência do que é o que realmente está rachar minha bunda.
Solução
Desde a sua resposta, eu acho que o elemento com um id 'header-seção' está no topo da página e, ocasionalmente, a regra css está sendo aplicado antes do resto a página é carregada. Isto significa que a tentativas de expressão para avaliar a offsetHeight de 'conteúdo-seção' antes da existência desse elemento.
Eu tenho um par de sugestões sobre como lidar com isso, mas você teria que experimentá-los, a fim de avaliar a sua utilidade.
1 / Em vez de fazer a regra baseada no ID do 'header-section', fazê-lo com base na classe '-seção de cabeçalho. Não adicione essa classe para a marcação, mas adicioná-lo após a conclusão do carregamento do documento, via jquery - deixar o id do elemento como é ...
$(document).ready(function(){
$("#header-section").addClass("header-section");
});
2 / Make a regra mais tolerante do '-seção de conteúdo' não foi encontrado - não sei quantas vezes a expressão é avaliada, como eu nunca senti a necessidade de expressão uso em regras CSS, de modo que este pode não funcionar .
#header-section {margin-top: expression((0 - (this.offsetHeight + (document.getElementById("content-section") ? document.getElementById("content-section").offsetHeight : 0))) + "px");}
Deixe-me saber como chegar lá.
P.S. Eu não tenho nenhuma idéia do que a regra está tentando alcançar - Eu zombava-se uma página com o que eu assumo é o mesmo layout, e tudo que faz é mover um monte de conteúdo fora do topo da página, de uma forma que impede -la de nunca ser visto.
Outras dicas
Parece que o script pode estar tentando acessar um objeto antes que o DOM foi totalmente criado. Você tem certeza de que está função é dentro da função pronto jQuery?
$(document).ready(function() {
// put all your jQuery goodness in here.
});
Eu percebi isso. Há duas expressões serem usados ??em um arquivo somente css IE. Aqui está uma por exemplo:
#header-section {margin-top: expression((0 - (this.offsetHeight + document.getElementById("content-section").offsetHeight)) + "px");}
Comentando ambos os casos que usam essas expressões resolve o problema. Não sei por que isso acontece exatamente (e eu não escrever o CSS que está fazendo isso, então eu não tinha idéia de olhar mesmo nesse arquivo CSS).
não pode ser um conflito com outros JS porque houve pelo menos 2 lugares esta estava a ser utilizado onde nenhum outro JS estava a ser carregado em tudo ainda o erro ocorreu ainda. Talvez os IDs (conteúdo de seção ou o cabeçalho de seção) não pôde ser encontrado, por algum motivo? Não tenho certeza ... especialmente porque o comportamento era tão inconsistente. Hmmm ...
Obrigado pela belugabob solução
Eu experimentei o mesmo erro com o objeto necessário na linha 0. Sua correção com a expressão ... ...:?. 0 no css para o ie de estilo fez o trabalho
A razão deste tipo de código é utilizado, movendo a navegação / headers-se, está relacionada SEO. Você quer que seu conteúdo na parte superior, e menos importante SE navegação sábio abaixo.