Pergunta

Eu estou tentando criar uma caixa de diálogo que aparecerá apenas se o navegador selecionado é IE (qualquer versão) no entanto eu recebo este erro:

Mensagem: HTML Análise de erro: Não é possível modificar o elemento de contêiner pai antes do elemento filho está fechado (KB927917)

Isso é tudo em "Line / Char / Código" 0 então eu não sei onde está o erro. O código que estou usando é o seguinte:

 <script type="text/javascript"> 
  <!--  
  if(BrowserDetect.browser.contains("Explorer"))
  {     
    var Nachricht = 'Hemos detectado que está utilizando ' + BrowserDetect.browser + ' ' +
  BrowserDetect.version + '. Puede que algunas funciones no estén habilitadas. <p></p> Si desea experimentar todo el potencial del portal, por favor intente desde otro navegador (browser). <p></p>Gracias
 showDialog('¡Aviso Importante!',Nachricht,'warning',10);
 } 
 </script>

Tenho notado se eu remover o "BrowserDetect.browser" e .version ele remove o erro, mas eu preciso aqueles para verificar = / ... todas as idéias serão apreciados =).

Foi útil?

Solução

Você está modificando documento enquanto ele está sendo carregado (quando o navegador não tem "visto" fechar tag para este elemento). Este causas situação muito complicada no analisador e no IE que não é permitido.

IE blogue tem explicação deste.

A solução é modificar um outro elemento que é no início do documento e foi completamente carregado (onde navegador já viu fechar tag para ele).


BTW: O </ corda não é permitido no elemento <script>. Use <\/ que é um equivalente seguro em cordas JS.

Outras dicas

Eu tive esse mesmo problema. Meu problema era que eu estava chamando uma função JavaScript antes do div contendo foi fechada.

Para corrigir o problema, eu chamar a função JavaScript dentro do manipulador de eventos ready jQuery:

$(document).ready(function(){
    some_random_javascript_function();
});

A leitura do doc ligadas por porneL, eu encontrei uma solução simples para este problema:. Adicionando um parâmetro 'adiar' para o roteiro, tudo bem funciona

<script defer=true>

Como Sergey Kirienko disse: use comentários condicionais. O código a seguir só será executada pelo Internet Explorer. Microsoft tem boas informações sobre desta página .

<!--[if IE]>
<script type="text/javascript"> 
 showDialog('¡Aviso Importante!','message','warning',10);
 </script>
<![endif]-->

Se você quer uma versão específica que você pode testar para isso também:

<!--[if lte IE 7]>
    <script type="text/javascript"> 
     showDialog('¡Aviso Importante!','Your are using a too old version of Internet explorer. Please upgrade','warning',10);
    </script>
<![endif]-->

sniffing Browser é um truque que deve ser evitado quando possível. É melhor para farejar o capacidade que você deseja usar. Digamos que você queira executar uma expressão XPath usando document.evaluate (), mas você não sabe se ele é suportado. Em vez de cheirar para navegadores suportados, faça o seguinte:

if (document.evaluate) {
    // go ahead and use it
} else {
    // browser doesn't support it; do something else
}

A melhor maneira de endereço IE são apenas comentários condicionais . Você não precisa nem usar JavaScript. Ver, por exemplo http://www.positioniseverything.net/articles/ie7-dehacker.html .

Talvez um pouco tarde, mas este erro também aparece se você estiver usando SWFObject e têm 2 divs com o mesmo id.

Eu tive divs duplicados, [com id = "flashcontent", graças copiar e colar].

resolvido renomeando os divs com ids únicos.

javascript funciona muito fácil com navigator.appName. (Veja http://de.selfhtml.org/javascript/objekte/navigator.htm) Você pode criar um consulta se com isso. Muito fácil, apenas experimentá-lo!

A versão atual do https://apis.google.com/js/plusone.js causou este bug no IE8 em um dos meus sites.

Mais fácil solução - remover o Google +.

solução fácil - quebrar o código em -função document.ready do jQuery ou similar:

$(document).ready(function(){
     var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
     po.src = 'https://apis.google.com/js/plusone.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top