35

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

4

9 回答 9

27

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

IE 博客对此进行了解释。

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


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

于 2008-11-20T00:19:17.457 回答
9

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

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

$(document).ready(function(){
    some_random_javascript_function();
});
于 2009-06-17T20:12:56.877 回答
7

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

<script defer=true>
于 2010-09-30T11:29:23.257 回答
3

就像 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]-->
于 2008-11-19T11:58:31.320 回答
3

浏览器嗅探是一个应尽可能避免的杂项。最好嗅探您想要使用的功能。假设您想使用 document.evaluate() 执行一个 XPath 表达式,但您不知道它是否受支持。不要嗅探支持的浏览器,而是这样做:

if (document.evaluate) {
    // go ahead and use it
} else {
    // browser doesn't support it; do something else
}
于 2008-11-19T20:10:52.903 回答
2

仅处理 IE 的最佳方法是条件注释。你甚至不需要使用 JavaScript。参见例如http://www.positioniseverything.net/articles/ie7-dehacker.html

于 2008-11-19T10:41:05.517 回答
0

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

我有重复的 div,[id="flashcontent",感谢复制和粘贴]。

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

于 2010-05-25T11:55:24.530 回答
0

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

于 2012-11-26T13:20:21.473 回答
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);
});
于 2013-11-24T22:49:14.010 回答