#ie javascript

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("別のメッセージ");
  }
}

参考サイト:http://sei.qee.jp/docs/freetalk/2009/02.html

Qihuan Piao

朴 起煥

中国育ち、東京暮らし。読んだり書いたり、時には考え込んだり。親になってから5年ほど、ブログ(とその他もろもろ)は完全停止していたけど、気づけばまた書いている。ここにはそんな寄り道の記録を書いています。結論が出ない話も多いけど、それもまたよし。