1

InternetExplorer8には次のコードがあります。

if (window.opener != null && window.opener.foo != null)  window.opener.foo = bar;

時々、window.openerが設定されます。ただし、ユーザーがポップアップを開いてから離れる場合は、ポップアップにプロパティを設定する試みは避けてください。

FirefoxとChromeでは、ユーザーがそのウィンドウを終了または更新するとnullになるため、これは機能window.openerします。ただし、IEではwindow.openernullwindow.opener.fooではなく、nullの代わりに「PermissionDenied」を指定します。このため、window.opener.foo != nulltrueと評価されます。

この問題を回避するにはどうすればよいですか。InternetExplorerの「アクセスが拒否されました」に一致する値はどれですか。

4

2 に答える 2

1

これは私がIE8で使用するチェックです:

if (window.opener && !window.opener.closed) {
    // do what you will with window.opener
}

編集:わかりやすいエラーを表示したい場合は、次のようなものを試すことができます:

try {
    if (window.opener && window.opener.foo != null) {
        window.opener.foo = bar;
    }
} catch (e) {
    if (e.description.toLowerCase().indexOf('permission denied') !== -1) {
        // handle it nicely
    } else {
        // some other problem, let it blow up
        throw e;
    }
}

これにより、他の潜在的なエラーを隠さずに、「アクセス拒否」エラーを具体的に処理できます。

于 2012-10-25T17:28:40.863 に答える
0

IEでwindow.openerのプロパティにアクセスできない場合は、それをObject.keys()に渡すと、長さが0の文字列が返されます。

使用例:

if (window.opener && Object.keys(window.opener).length) {
  // do what you will with window.opener
}
于 2016-06-14T09:36:08.277 に答える