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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top