web-dev-qa-db-ja.com

window.openerの代替

モーダルポップアップウィンドウを開いています。次に、window.openerを使用して、親ウィンドウのテキストボックスおよびその他の属性にアクセスします。 Firefoxでは正常に動作しますが、IE8では動作しません。エラーが発生します'window.opener is null'。両方のブラウザで機能する子ウィンドウの親ウィンドウ属性にアクセスするにはどうすればよいですか。

19
dmay

引数をshowModalDialog関数に渡すことができます。引数としてウィンドウオブジェクトを渡すだけです。

window.showModalDialog(theURL, window);

Yoは、dialogArgumentsを使用して、モーダルウィンドウから引数にアクセスできます。参照: http://msdn.Microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

var openerWindow = window.dialogArguments;
7
Kaitnieks

問題を解決する方法は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>
10
Krishn Y

このオブジェクトへのアクセスを防ぐInternet Explorerの「保護モード」を無効にします。

この手順は次のとおりです。

  1. Alt + Tキーを押して、[ツール]メニューを表示します
  2. [インターネットオプション]をクリックします
  3. 「セキュリティ」タブを選択します
  4. 選択したゾーンにサイトが含まれていることを確認してください。イントラネットサイトの場合、通常は「ローカルイントラネット」ゾーンになります。
  5. 「保護モードを有効にする」のチェックを外します
  6. すべてのIEタブとウィンドウを閉じて、再度開きます。

これで、window.openerオブジェクトにアクセスできるはずです。

1
Aidan

私が取るアプローチは次のとおりです。

  1. 既存のJavaScript UIライブラリを使用する
  2. ブラウザがwindow.openerメソッドを探るOpenWindowという関数を作成します

例えば:

if(window.opener == undefined) {
   //probably not Firefox...
}

そして、見つかった場合はそれを使用し、そうでない場合はIEバリアントをテストして使用します。そして、Safariのバージョンなどをチェックします...

0
Xhalent

クロスブラウザの代替として、新しいウィンドウを開いている間にカスタム属性を与えることができます:

var popup = window.open(...);
popup.isPopup = true;

次に、参照ページで:

if (window.isPopup) {
  // Do something
}
else {
  // Not in a popup
}
0