【发布时间】:2012-11-14 12:39:17
【问题描述】:
我有一个令人费解的问题:这个看似简单的页面在 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>
我得到的行为是 有时 页面显示“正常”,而 有时 它不显示任何内容。我发现这取决于计算机的速度。如果您使用的是速度快的计算机,它通常可以正常工作,但在速度较慢的计算机上,它大约有 3 次失败。
当我查看调试控制台时,症状是 jQuery 在尝试访问 navigator.userAgent 时获得权限被拒绝。
浏览器写入(在日志中)它正在从quirks 模式切换到IE9 模式。我的假设是 jQuery 在浏览器切换到 IE9 模式之前被加载,导致 jQuery 在 quirks 模式下被捕获,并且从那里无法访问任何浏览器属性。
我曾尝试插入<!doctype html> 并插入X-UA-Compatible 元标记以使IE9 立即切换到IE9 模式,但并没有解决问题。
我已经设法省略了 jQuery,并用这个简单的 sn-p 重现了这个问题:
<!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/ 获得。)
通过以下方式复制它:
- 打开页面。
- 按 F5。
- 将光标放在地址栏中。
- 按回车键。
根据需要重复步骤 2-4。问题可能是因为没有等待 DOM 加载(如 http://bugs.jquery.com/ticket/12282 中所述)。
【问题讨论】:
-
从顶部删除
<?xml version="1.0" encoding="UTF-8"?>。 -
...但是页面应该以
<!doctype html>开头(尝试无济于事)或像这样的XML声明...? -
你有没有
<!doctype html>而不是的XML标签? -
这是重现问题的简单方法。转到test.m.e17.dk/jquery-not-loading。按 F5。现在在地址栏中选择 url,然后按 enter。按 F5 然后按 Enter 重复将再次重现。 (我修改了示例以使用
<!doctype html>代替 XML 声明。)请记住,它仅在 IE9 中失效。 -
不,无法重现。看起来是您自己的浏览器的本地问题。
标签: jquery internet-explorer-9