IE中HTML解析器的问题

时间:2008-11-19 10:31:47

标签: javascript html-parsing

我正在尝试创建一个对话框,只有在选择的浏览器是IE(任何版本)时才会出现但是我收到此错误:

  

消息:HTML分析错误:在子元素关闭之前无法修改父容器元素(KB927917)

全部在“Line / Char / Code”0中,所以我不知道错误在哪里。我正在使用的代码是:

 <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>

我注意到如果我删除了“BrowserDetect.browser”和.version它会删除错误,但我需要检查= / ...任何想法都会被赞赏=)。

9 个答案:

答案 0 :(得分:27)

您正在加载文档时修改文档(当浏览器没有“看到”此元素的结束标记时)。这会导致解析器中非常棘手的情况,并且在IE中它是不允许的。

IE blog对此有解释。

解决方案是修改文档中较早且已完全加载的另一个元素(浏览器已经看到它的结束标记)。


BTW:</元素中不允许使用字符串<script>。使用<\/这是JS字符串中的安全等价物。

答案 1 :(得分:9)

我有同样的问题。我的问题是我在关闭包含div之前调用了Javascript函数。

要解决此问题,我在jQuery ready事件处理程序中调用Javascript函数:

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

答案 2 :(得分:7)

阅读由porneL链接的doc,我找到了解决此问题的简单方法:在脚本中添加参数“defer”,一切正常。

<script defer=true>

答案 3 :(得分:3)

像谢尔盖·基里恩科所说:使用条件评论。以下代码仅由Internet Explorer执行。 Microsoft在this页面上提供了很好的信息。

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

如果你想要一个特定版本,你也可以测试它:

<!--[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]-->

答案 4 :(得分:3)

浏览器嗅探是一种应尽可能避免的问题。最好嗅探您想要使用的功能。假设您要使用document.evaluate()执行XPath表达式,但您不知道它是否受支持。而不是嗅探支持的浏览器,请执行以下操作:

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

答案 5 :(得分:2)

仅解决IE的最佳方法是条件评论。您甚至不需要使用JavaScript。请参阅示例http://www.positioniseverything.net/articles/ie7-dehacker.html

答案 6 :(得分:0)

也许有点晚了,但是如果你使用的是SWFObject并且有两个具有相同id的div,那么这个错误也会弹出。

我有重复的div,[id =“flashcontent”,感谢copy&amp; paste]。

通过使用唯一ID重命名div来解决。

答案 7 :(得分:0)

使用navigator.appName可以非常轻松地使用javascript。 (见http://de.selfhtml.org/javascript/objekte/navigator.htm) 您可以使用此方法创建if-query。很简单,试试吧!

答案 8 :(得分:0)

当前版本的https://apis.google.com/js/plusone.js在我的某个网站上的IE8上导致了此错误。

最简单的解决方案 - 删除Google +。

简单的解决方案 - 将代码包装在jquery的document.ready -function或类似代码中:

$(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);
});