1

私は自分の問題の解決策を高低で探していましたが、パズルのピースを見つけることしかできず、それらを接続する方法はありません。他の複数のウィンドウを開くことができるウィンドウ(それ自体がメインウィンドウの子です)があります。親が閉じているときに子ウィンドウを閉じてほしいのですが、簡単そうに聞こえますか?

これがジレンマです。親ウィンドウは子を開くときにポストバックを実行するため、保持しているハンドルの配列(オブジェクトでもあります)は保持されません。この配列をシリアル化および逆シリアル化して非表示フィールドに格納することを検討しましたが、それが最善の解決策とは思えません。また、開いているウィンドウの親にアクセスできません。

Javascriptを除いて、サーバー側のコードはC#で記述されており、私はasp.netを使用しています。これに対する合理的な解決策はありますか?また、私が使用しているコードは、到達するずっと前に複数の異なる人々によって作成されたものであるため、ほとんどの動作を変更するのではなく、追加したいと思います。

最後に、コードをここに投稿するのが一般的には良い考えですが、私は単にvar win = window.openウィンドウを開くタスクを実行するために使用しています。

ありがとうございました。

4

2 に答える 2

0

どうですか

var wins = [];
function newChildWindow(...) {
    wins.push(window.open(...));
}
window.onuload = function() {
    for (var i=0; i<wins.length; i++)
        if (!wins[i].closed)
            wins[i].close();
};
于 2012-03-15T16:51:43.233 に答える
0

OK、それから私はその問題を回避するための3つの方法を見ます:

  • 複数のブラウザウィンドウを使用しないでください。ただし、すべてのダイアログを表示するようにページのスタイルを設定してください。@Gatsが示唆したように。OK、子ウィンドウ内を移動している間、親の「ウィンドウ」の入力を永続的にしたい場合は、多少制限があります。
  • 親をアンロードするためにポストバックを更新しないでください。代わりにAjaxを使用して、アプリケーションサーバーにデータを送信します
  • (ウィンドウ)オブジェクトを保存することはできません。文字列のみを保存できます。ウィンドウを開くときに、「ターゲット」名を付けることができます。window.open同じターゲット(名前)を持つ他のウィンドウは、すでに開いている名前を使用します。これにより、自分で開いていないウィンドウを参照して閉じることができます。https://stackoverflow.com/a/563478/1048572を参照してください
于 2012-03-15T17:33:17.300 に答える