每当我们公司域中的具有 IE9 的机器导航到网站(从链接)时,当访问以下任何窗口属性(styleMedia、clientInformation、screen、history、navigator、localStorage、performance)时,我们都会收到 Permission Denied 错误对话框,会话存储)。初始页面加载工作,但是当您有指向同一页面的链接时,会发生错误。
最初,这在加载 JQuery 库时表现出来。JQuery 第一次访问 window.navigator.userAgent 时会出现权限被拒绝错误。
我们所有的机器都是 Windows 7 64 位 Enterprise SP1。下面的代码可以从 IIS 或直接打开 .html 文件运行。
我们无法在公司域之外重现此问题。我们怀疑我们公司环境中的某些政策,但无法确定导致此问题的政策。
我们可以通过以下方式缓解这个问题:
- 切换到 IE7 或 IE8 文档模式然后回到 IE9 标准文档模式将使浏览器进入从那时起可以工作的状态。
- 刷新页面将修复单个页面加载,但当单击链接并通过链接加载另一个页面(可能与您当前所在的页面相同)时,该问题将再次出现。
- 从我们域之外的机器导航到该网站。
测试.html
<html>
<head>
<title>Permission Denied</title>
</head>
<body>
<a href="test.html">Click Here</a>
<script type="text/javascript">
alert(window.navigator);
</script>
</body>
</html>
要查看所有无法访问的属性,我们可以打开此 html 并单击页面上的链接:
测试窗口.html
<html>
<head>
<title>Permission Denied</title>
</head>
<body>
<a href="testWindow.html">Click Here</a>
<script type="text/javascript">
var deniedProperties = '';
for (var i in window) {
var obj = window[i];
if (obj == null) continue;
try {
obj._____x = 1; // Attempt to access the object and set a new value on that object.
}
catch (e) {
if (e.number == -2146828218) { // Permission Denied error number.
deniedProperties += i + '\n';
}
}
}
alert('Permission Denied:\n' + deniedProperties);
</script>
</body>
</html>
更新
这是针对 IE6 问题而实施的域策略。通过与 Microsoft 的支持人员合作,我们发现了导致问题的策略,当我在工作机器上重现问题时,该支持人员记录并分析了策略的使用情况。
您可以尝试的另一个想法是在 Active Directory 中设置一个您拥有完全修改权限的子组织单位。让它继承公司的所有策略,然后使用二进制消除来阻止策略,直到找到导致问题的策略。