我正在尝试创建一个对话框,只有在选择的浏览器是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它会删除错误,但我需要检查= / ...任何想法都会被赞赏=)。
答案 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)
<!--[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);
});