我有一个令人费解的问题:这个看似简单的页面在IE9中不起作用:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<!-- jq.js is the non-minified jQuery library -->
<script type="text/javascript" src="jq.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('body').append('<h1>ok</h1>');
});
</script>
</head>
<body>
</body>
</html>
我得到的行为是有时页面显示“ok”,有时它不显示任何内容。我发现它取决于计算机的速度。如果你在快速计算机上,它通常可以工作,但在慢速计算机上,它会在3次中失败2次。
当我查看调试控制台时,症状是jQuery在尝试访问navigator.userAgent
时获得权限被拒绝。
浏览器(在日志中)写入它从quirks
模式切换到IE9
模式。我的假设是在浏览器切换到IE9
模式之前加载了jQuery,导致jQuery被捕获到quirks
模式,并从那里无法访问任何浏览器属性。
我尝试插入<!doctype html>
并插入X-UA-Compatible
元标记,以使IE9立即切换到IE9
模式,但它无法解决问题。
我设法省略了jQuery并使用这个简单的代码重现了这个问题:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
</head>
<body>
<script type="text/javascript">
document.write('<h1>testing</h1>');
try {
document.write('<h1>' + navigator.userAgent + '</h1>');
document.write('<h1>ok</h1>');
} catch(e) {
document.write('<h1>not ok</h1>');
}
</script>
</body>
</html>
(http://test.m.e17.dk/ie9-navigator/时可用。)
通过以下方式重现:
根据需要重复步骤2-4。问题可能是因为没有等待加载DOM(如http://bugs.jquery.com/ticket/12282中所述)。
答案 0 :(得分:2)
我不知道1.9但我在IE9上的回归率为1.8(回归超过1.7)。这里详细描述了这个错误:
http://bugs.jquery.com/ticket/12282
基本上,在IE9中触发document.ready时,DOM可能还没有准备好,因为你的javascript脚本可能会在读取整个页面之前启动。
显然,关于这是一个怎样的错误实际上存在争议。
无论如何,更新到1.8.2解决了我的问题。我希望你能为1.9分支提供相同的修复,如果它真的是你遇到的同一个bug。
另一种解决方案是在html所需的一切之后,尽可能简单地将document.ready部分移动到页面的末尾(当然,在简化的示例中,它将无效,因为您使用{{ 1}},但希望在你真正的代码中你不需要它。)
或者,如果你想弄清楚并且在1.9中没有修复它,那么这里已经为1.8实现了修复:
https://github.com/jquery/jquery/commit/0f553ed0ca0c50c5f66377e9f2c6314f822e8f25
正如您所看到的,它只是一行代码,因此您可以维护自己的1.9版本的固定版本,直到有稳定版本,或者您可以在自己的jquery脚本中实现相同的安全措施。
答案 1 :(得分:2)
我找到了此错误的原因:它是Active Directory中的组策略设置导致IE9行为异常。我将尝试获取确切的名称,并将其添加到任何遇到相同问题的人。
感谢所有人的帮助。
有关政策见下图。
答案 2 :(得分:1)
只是一个建议,您是否尝试从同一内容传送网络下载这两个脚本?并且只是确保订单是正确的(您的看起来是正确的)但也可能是由于来自一个来源的延迟或者其他。旁注:尝试将脚本标记放在文档的底部,而不是标题,这是由于性能问题。