モーダルポップアップウィンドウを開いています。次に、window.opener
を使用して、親ウィンドウのテキストボックスおよびその他の属性にアクセスします。 Firefoxでは正常に動作しますが、IE8では動作しません。エラーが発生します'window.opener is null'。両方のブラウザで機能する子ウィンドウの親ウィンドウ属性にアクセスするにはどうすればよいですか。
引数をshowModalDialog関数に渡すことができます。引数としてウィンドウオブジェクトを渡すだけです。
window.showModalDialog(theURL, window);
Yoは、dialogArgumentsを使用して、モーダルウィンドウから引数にアクセスできます。参照: http://msdn.Microsoft.com/en-us/library/ms533723%28VS.85%29.aspx
var openerWindow = window.dialogArguments;
問題を解決する方法は2つあります。注: "window.opener"は、IE if "showModalDialog"がサポートされていない場合中古。
1) "window.showModalDialog"の代わりに "window.open"を使用
2) "window.showModalDialog"を使用する場合は、次の手順を実行します。
<script language="javascript" type="text/javascript">
function YourFunction()
{
var opener = null;
if (window.dialogArguments) // Internet Explorer supports window.dialogArguments
{
opener = window.dialogArguments;
}
else // Firefox, Safari, Google Chrome and Opera supports window.opener
{
if (window.opener)
{
opener = window.opener;
}
}
// write you code and refer "opener"
window.close();
}
</script>
このオブジェクトへのアクセスを防ぐInternet Explorerの「保護モード」を無効にします。
この手順は次のとおりです。
これで、window.openerオブジェクトにアクセスできるはずです。
私が取るアプローチは次のとおりです。
window.opener
メソッドを探るOpenWindow
という関数を作成します例えば:
if(window.opener == undefined) {
//probably not Firefox...
}
そして、見つかった場合はそれを使用し、そうでない場合はIEバリアントをテストして使用します。そして、Safariのバージョンなどをチェックします...
クロスブラウザの代替として、新しいウィンドウを開いている間にカスタム属性を与えることができます:
var popup = window.open(...);
popup.isPopup = true;
次に、参照ページで:
if (window.isPopup) {
// Do something
}
else {
// Not in a popup
}