2009-11-22 76 views
35

javascript window.open()関数を呼び出して、別のURLをポップアップに読み込みます。ユーザーが終了すると、window.close()関数を呼び出すクローズウィンドウと呼ばれるリンクを持つ最後のページに移動します。そのページが閉じると、ウィンドウを開いた元のページのものを更新する必要があります。これを行う方法はありますか?元のページにある関数を呼び出す必要があります。子ウィンドウが閉じるときに親ウィンドウの機能を実行するには?

+0

参照してくださいを参照してください、あなたは未定義のオープナーの問題が表示され、あなたは親ページのプロパティにアクセスすることはできませんhttp://stackoverflow.com/questions/1112340/how-to-run-function-of-parent-window-when-child-window-closes –

答えて

54

あなたは何とかこの試すことができます。

スポーンウィンドウ:

window.onunload = function (e) { 
    opener.somefunction(); //or 
    opener.document.getElementById('someid').innerHTML = 'update content of parent window'; 
}; 

親ウィンドウ:

window.open('Spawn.htm',''); 
window.somefunction = function(){ 

} 

あなたがいけませんのthでこれを行うEの親、そうでない場合opener.somefunctionは() やっwindow.somefunctionはパブリックとしてsomefunctionを行い、動作しません。

function somefunction(){ 

} 
+1

それは私が偉大な作品を探していたものでした。 – ngreenwood6

+0

+1は、適切なタイミングで私を助けました。 window.somefunction = function {....}の記述はsomefunction(){....}関数と同じです。 –

+1

生成されたウィンドウと親ウィンドウが同じドメインに属していない場合、IEではこれが機能しません。 – Binod

9

onbeforeunload」イベントを使用します。子ウィンドウが閉じる直前に親ウィンドウ内の関数を子ウィンドウから呼び出すことができます。

だから、おそらくこのような何か:

window.onbeforeunload = function (e) { 
    window.parent.functonToCallBeforeThisWindowCloses(); 
}; 
+0

それは私が探しているようですが、どのようにそれがどのようなウィンドウ私は話している。たとえば、window.open()を実行し、そのウィンドウの下にそれを追加するか、そのウィンドウにどのようにアタッチするのですか? – ngreenwood6

+0

あなたはその子ウィンドウのHTMLのスクリプトタグにonbeforeunloadを入れます。子ウィンドウには親が1つしかないので、ブラウザーはその親ウィンドウが何であるかを自動的に認識します。 –

+0

親ウィンドウ内にdoSomething()という関数がありますが、子ウィンドウで定義されていない関数をまだ実行することはできますか? – ngreenwood6

4

答え彼らが生み出したウィンドウにコードを追加する必要として。それは不必要な結合です。

// In parent window 
var pop = open(url); 
pop.onunload = function() { 
    // Run your code, the popup window is unloading 
    // Beware though, this will also fire if the user navigates to a different 
    // page within thepopup. If you need to support that, you will have to play around 
    // with pop.closed and setTimeouts 
} 
0

私はこの記事が古いですけど、私はこれは本当によく働くことがわかった:

window.onunload = function() { 
    window.opener.location.href = window.opener.location.href; 
}; 

window.onunload部分は、私は、このページをグーグルで見つけヒントでした。ありがとう、@ jerjer!

-2

linkを確認してください。これは、親ウィンドウでは...あまりにも

参考になる:

function OpenChildAsPopup() { 
     var childWindow = window.open("ChildWindow.aspx", "_blank", 
     "width=200px,height=350px,left=200,top=100"); 
     childWindow.focus(); 
} 

function ChangeBackgroudColor() { 
     var para = document.getElementById('samplePara'); 
     if (para !="undefied") { 
      para.style.backgroundColor = '#6CDBF5'; 
     } 
} 

親ウィンドウのHTMLマークアップ:子ウィンドウで

<div> 
    <p id="samplePara" style="width: 350px;"> 
      Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
    </p><br /> 
<asp:Button ID="Button1" Text="Open Child Window" 
     runat="server" OnClientClick="OpenChildAsPopup();"/> 
</div> 

// This will be called when the child window is closed.  
    window.onunload = function (e) { 
     opener.ChangeBackgroudColor(); 
     //or you can do 
     //var para = opener.document.getElementById('samplePara'); 
     //if (para != "undefied") { 
     // para.style.backgroundColor = '#6CDBF5'; 
     //} 
    }; 
7

これは古い記事ですしかし、私はこれを行う別の方法を追加すると思った:

var win = window.open("http://www.google.com"); 

var winClosed = setInterval(function() { 

    if (win.closed) { 
     clearInterval(winClosed); 
     foo(); //Call your function here 
    } 

}, 250); 

子ウィンドウから内容を変更したり、イベントハンドラを使用する必要はありません。

jerjerの答え(上)と一緒に
+0

あなたは天才です、仲間!ありがとう!!! –

関連する問題