2009年11月19日
IE JavaScript実行した際の「アクセスが拒否されました」メッセージ
経緯
iframeで動的に画面を読み込む際URL不正などによる通信エラーが起こした場合の
エラーハンドラを追加したかったので判断するロジックが必要でした。
わざと誤ったURLを渡して検証しましたが、以下のコードはだめでした。
// documentがnullかと思ってそれで判断しようとしたんです。
if (this.contentWindow.document) {}
現象
あるプロパティは存在しているのに、アクセスができない。コードで書くと
// プロパティがオブジェクトに存在するかを判断
// ここはアラーとが出した、つまり存在したってこと
if ("aProperty" in obj) alert('obj has aProperty');
// 次にそのオブジェクトにアクセスしようとすると
// エラーになった
obj.aProperty
IE8の開発ツールで見たら「アクセスが拒否されました」と書いてある。
エラーをcatch
判断のロジックをtry-catch文に書けばいいです。
try {
this.contentWindow.document;
} catch (e) {
if (e.number == -2147024891) {
//アクセスが拒否されました。
alert(e.message);
} else {
alert("別のメッセージ");
}
}