Problema com HTML Parser no IE
-
08-07-2019 - |
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 =).
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();
});
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);
});