web-dev-qa-db-ja.com

ポップアップウィンドウが閉じているかどうかを確認します

ポップアップウィンドウを開いています

var popup = window.open('...', '...');

このJavaScriptはコントロールで定義されています。このコントロールは、Webページから使用されます。ポップアップを閉じたときにこのポップアップを開くページをリロードしたい。

基本的に、ユーザーはポップアップウィンドウにいくつかの金種を入力して送信する必要があります。これらの金種は、ユーザーセッションに保存されます。また、ユーザーが[送信]をクリックすると、ポップアップウィンドウが閉じます。同時に、このポップアップを開くウィンドウを更新して、ユーザーがポップアップで行った更新を再フェッチします。

私がやろうとしている

var popup = window.open('...','...');
if (popup) {
  popup.onClose = function () { popup.opener.location.reload(); }
}

私はそれを間違っていると思いますが、これは機能していないようです。

問題をテストするためにこれを試しましたが、アラートは表示されませんでした。

if (popup) {
  popup.onclose = function() { 
    alert("1.InsideHandler");
    if (opener && !opener.closed) { 
      alert("2.Executed.");
      opener.location.reload(true); 
    } else { 
      alert("3.NotExecuted.");
    }
  }
}
11
S M Kamran

これが私が提案するものです。

ポップアップに次のように表示されます。

_<script type="text/javascript">

function reloadOpener() {
  if (top.opener && !top.opener.closed) {
    try {
      opener.location.reload(1); 
    }
    catch(e) {
    }
    window.close();
  }
}
window.onunload=function() {
  reloadOpener();
}
</script>
_
_<form action="..." target="hiddenFrame">
</form>
<iframe style="width:10px; height:10px; display:none" name="hiddenFrame" src="about:blank"></iframe>
_

その後、サーバープロセスで戻ります

_<script>
   top.close();
</script>
_

古い提案

ポップアップウィンドウには、ポップアップと呼ばれる変数はありません。試してみてください

_var popup = window.open('...','...');
if (popup) {
  popup.onclose = function () { opener.location.reload(); }
}
_

またはテスト付き:

_popup.onclose = function () { if (opener && !opener.closed) opener.location.reload(); }
_

PS: onclose すべてのブラウザでサポートされているわけではありません

PPS:location.reloadはブール値を取ります。opener.location.reload(1);のようにキャッシュからロードしない場合は、trueを追加します。

6
mplungjan

これを試して:

window.opener.location.reload(true);

または

閉じる前にポップアップに

window.opener.location.href = window.opener.location.href;
window.close();
1
Amandeep

代わりに、そのようなモーダルダイアログを使用する必要があります

var popup = window.showModalDialog("page.html", "", params);

これにより、ダイアログが閉じるまでこの行で停止します。

次に、page.htmlのどこかに、ポップアップ変数を配置するwindow.returnValueを設定するJavaScriptをコーディングします。

更新

Window.showModalDialog()は 現在は廃止されています です。

0
Ash Burlaczenko

さて、あなたがすることは次のとおりです。

メソッド「setWindowObjectInParent」を作成し、ポップアップでそれを呼び出します。 var popupwindow;

function setWindowObjectInParent(obj)
{
popupwindow = obj;
}

これで、フォーカスを呼び出すことができるオブジェクトができました。

したがって、ポップアップに追加します

$(window).unload(function(){
window.opener.setWindowObjectInParent();
});
window.opener.setWindowObjectInParent(window);

これにより、ポップアップが閉じているときにobjの設定が解除され、ポップアップが開いているときにオブジェクトが設定されます。

したがって、ポップアップが定義されているかどうかを確認してから、フォーカスを呼び出すことができます。

0
Jcvv