企業ドメインにある IE9 を搭載したマシンが (リンクから) Web サイトに移動するたびに、次のウィンドウ プロパティ (styleMedia、clientInformation、screen、history、navigator、localStorage、performance) のいずれかにアクセスすると、Permission Denied エラー ダイアログが表示されます。 、セッションストレージ)。最初のページの読み込みは機能しますが、同じページへのリンクがあるとエラーが発生します。
もともと、これは JQuery ライブラリがロードされたときに明らかになりました。JQuery が window.navigator.userAgent に初めてアクセスすると、パーミッション拒否エラーが発生しました。
すべてのマシンは Windows 7 64 ビット Enterprise SP1 です。以下のコードは、IIS から実行するか、.html ファイルを直接開いて実行できます。
この問題は、当社の企業ドメイン以外では再現できません。当社の企業環境に何らかのポリシーがあると思われますが、どのポリシーがこの問題の原因であるかを特定できませんでした。
この問題は次のように軽減できます。
- IE7 または IE8 のドキュメント モードに切り替えてから IE9 標準のドキュメント モードに戻すと、ブラウザはそれ以降動作する状態になります。
- ページを更新すると 1 つのページの読み込みが修正されますが、リンクがクリックされ、リンクを介して別のページ (現在表示しているページと同じページである可能性があります) が読み込まれると、問題が再発します。
- ドメイン外のマシンから Web サイトに移動します。
test.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 を開いてページ上のリンクをクリックします。
testWindow.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 のサポート担当者と協力して、どのポリシーが問題を引き起こしているかを突き止めました。Microsoft のサポート担当者は、私が自分の作業用マシンで問題を再現したときに、ポリシーがどのように使用されているかを記録および分析しました。
もう 1 つの方法として、Active Directory に子組織単位を設定して、完全な変更権限を持つようにすることもできます。企業からすべてのポリシーを継承させてから、問題の原因となっているポリシーが見つかるまで、バイナリ消去を使用してポリシーをブロックします。