提问人:Tsundoku 提问时间:11/19/2008 更新时间:11/25/2013 访问量:75526
IE中的HTML解析器问题
Problem with HTML Parser in IE
问:
我正在尝试创建一个对话框,该对话框仅在选择的浏览器是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,它会删除错误,但我需要这些来检查 =/...任何想法将不胜感激=)。
答:
仅解决 IE 的最佳方法是条件注释。您甚至不需要使用 JavaScript。例如,请参阅 http://www.positioniseverything.net/articles/ie7-dehacker.html。
就像谢尔盖·基里延科(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]-->
浏览器嗅探是一个麻烦,应尽可能避免。最好嗅探要使用的功能。假设您想使用 document.evaluate() 执行 XPath 表达式,但您不知道它是否受支持。与其嗅探受支持的浏览器,不如执行以下操作:
if (document.evaluate) {
// go ahead and use it
} else {
// browser doesn't support it; do something else
}
您正在加载文档时对其进行修改(当浏览器尚未“看到”此元素的结束标记时)。这在解析器中会导致非常棘手的情况,并且在 IE 中是不允许的。
IE博客对此进行了解释。
解决方案是修改文档中较早且已完全加载的另一个元素(浏览器已经看到了它的结束标记)。
顺便说一句:元素中不允许使用字符串。在 JS 字符串中使用 which 是安全的等价物。</
<script>
<\/
我也有同样的问题。我的问题是我在关闭包含之前调用了 Javascript 函数。div
为了解决这个问题,我在 jQuery 事件处理程序中调用了 Javascript 函数:ready
$(document).ready(function(){
some_random_javascript_function();
});
评论
load
DOMReady
也许有点晚了,但如果您使用 SWFObject 并且有 2 个具有相同 id 的 div,也会弹出此错误。
我有重复的divs,[使用id=“flashcontent”,感谢复制和粘贴]。
通过重命名具有唯一 ID 的 div 来解决。
阅读 porneL 链接的文档,我找到了解决这个问题的简单解决方法:在脚本中添加参数“defer”,一切正常。
<script defer=true>
javascript 使用 navigator.appName 非常容易。(见 http://de.selfhtml.org/javascript/objekte/navigator.htm) 您可以使用它创建 if 查询。很简单,试试吧!
当前版本的 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);
});
评论