IE中的HTML解析器问题

Problem with HTML Parser in IE

提问人:Tsundoku 提问时间:11/19/2008 更新时间:11/25/2013 访问量:75526

问:

我正在尝试创建一个对话框,该对话框仅在选择的浏览器是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,它会删除错误,但我需要这些来检查 =/...任何想法将不胜感激=)。

JavaScript HTML 解析

评论


答:

2赞 Sergey Kirienko 11/19/2008 #1

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

3赞 some 11/19/2008 #2

就像谢尔盖·基里延科(Sergey Kirienko)所说:使用条件注释。以下代码只能由 Internet Explorer 执行。Microsoft 在此页面上提供了很好的信息。

<!--[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]-->
3赞 Robert J. Walker 11/20/2008 #3

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

if (document.evaluate) {
    // go ahead and use it
} else {
    // browser doesn't support it; do something else
}
27赞 Kornel 11/20/2008 #4

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

IE博客对此进行了解释。

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


顺便说一句:元素中不允许使用字符串。在 JS 字符串中使用 which 是安全的等价物。</<script><\/

9赞 Nick 6/18/2009 #5

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

为了解决这个问题,我在 jQuery 事件处理程序中调用了 Javascript 函数:ready

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

评论

1赞 Yi Jiang 10/5/2010
给未来读者的注意:您实际上并不需要 jQuery 来执行此操作 - 搜索 或 事件处理程序loadDOMReady
1赞 Ian Grainger 10/27/2010
如果你打算使用jQuery,你可以使用document.ready的语法快捷方式:$(function() {return false;});
0赞 robasta 5/25/2010 #6

也许有点晚了,但如果您使用 SWFObject 并且有 2 个具有相同 id 的 div,也会弹出此错误。

我有重复的divs,[使用id=“flashcontent”,感谢复制和粘贴]。

通过重命名具有唯一 ID 的 div 来解决。

7赞 Pablo Alba 9/30/2010 #7

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

<script defer=true>
0赞 David 11/26/2012 #8

javascript 使用 navigator.appName 非常容易。(见 http://de.selfhtml.org/javascript/objekte/navigator.htm) 您可以使用它创建 if 查询。很简单,试试吧!

0赞 Apeli 11/25/2013 #9

当前版本的 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);
});