2016-12-06 9 views
1

以下は私のJavaScriptコードです。javascript:ポップアップページの更新時に閉じる

ポップアップが開かれていますが、ページが更新されています。今私はポップアップを閉じる必要があります。私はpopupWindowをlocalStorageに保存しようとしています。しかし、私がlocalStorage.getItem("someVarName")を通過しているとき。私は元のDOMを取得していない、そのように見える変更されました。 私のページがリフレッシュされているので、私はdomを保存しなければなりません。

どうすればいいか教えてください。

<script language="javascript" type="text/javascript"> 
    function openPopup(URL) { 
    popupWindow = window.open(URL, 'popupWindow', 'height=300,width=450'); 
    localStorage.setItem("someVarName", popupWindow); 
    } 

    function closePopup() { 
    var popupWindow = localStorage.getItem("someVarName"); 
    popupWindow.close(); 
    } 
</script> 
+1

localstorageはオブジェクトとウィンドウ参照ではなく文字列を保存します。 – epascarello

+0

epascarello:このケースをどう扱うか? – VJS

+0

私はちょうど1,2日前に非常によく似た質問に答えました。 *編集:*見つけた([ここ](http://stackoverflow.com/questions/40962589/call-function-simultaneously-with-location-reload-to-display-a-proper-message-in))、ないこれが重複しているかどうかを確認してください... –

答えて

1

のWebストレージに格納文字列。その中にウィンドウ参照を格納することはできません。

あなたは、しかし、あなたが使用した名前を保存し、window.openであることを再利用することができます

あなたのページがアクセス権はあなたにそれへの参照を与えている既存のウィンドウの名前で window.openを呼び出す
function openPopup(URL) { 
    window.open(URL, 'popupWindow', 'height=300,width=450'); 
    localStorage.setItem("someVarName", "popupWindow"); 
} 

function closePopup() { 
    var name = localStorage.getItem("someVarName"); 
    if (name) { 
     var wnd = window.open("", name); 
     wnd.close(); 
     localStorage.removeItem("someVarName"); 
    } 
} 

新しいウィンドウを開くのではなく、既存のウィンドウを開きます。

ウィンドウが開いていないときにストレージから名前を消去しているので、私たちはそれを閉じようとしません(逆説的に開くと思います)。

私のanswer to this other questionには完全な例があります。

+0

このオープンしている新しいウィンドウはありませんか?このコード:var wnd = window.open( ""、name); – VJS

+0

@VJS: "既存のウィンドウの名前を持つ' window.open'を呼び出す... * "既存のウィンドウに*" ...が付いているはずです。*新しいウィンドウを開くのではなく、 * "*(今は:-))。 –

関連する問題