2012-02-13 15 views
0

私は非常に奇妙な問題を抱えています。どうして私にこれを必要としているのか聞かないでください。 私はpage1を持っています。 Page1には、window.open関数を使用して新しいウィンドウ(page2)を開くリンクがあります。 chatWindowは、window.open関数からの戻り値を持つ子ウィンドウのハンドラです。 今、私はページ1からページ3に移動します(リンク<a href="...." target="_self">Some Text</a>)。ページ2が閉じているか開いているか確認する必要があります。 ハンドラchatWindowをpage1からpage3に渡すにはどうすればいいですか?あるページから別のページへウィンドウハンドラを渡すには? (JavaScript)

ありがとうございます!

答えて

1

ページ2とページ3では、window.openerを使用してページ1を参照できます。 page1では、page2がまだ開いているかどうかをチェックするメソッドを定義できます。window.openは新しいウィンドウのインスタンスを返し、ウィンドウが閉じている場合はnullを返します。

同じドメインにある場合にのみ、ウィンドウからプロパティを読み取ることができます。ドメインが異なる場合は、window.postMessageメソッドを使用して通信を有効にすることができます。私は簡単にするために、グローバル変数を使用していた

window.page2 = window.open('...'); 
window.page3 = window.open('...'); 

// At page3: 
if (window.opener && window.opener.page2 != null) { // Not null or undefined 
    // Do something 
} 

彼らは同じドメインにいると仮定すると、次のコード(コンセプトコード)を使用することができます。より良い実装は、名前空間で構成することができます。

window.openedWin = {}; 
window.openedWin.page2 = window.open('...'); 
... 
// At page3: 
if (window.opener && window.opener.openedWin && window.opener.openedWin.page2 ... 
+0

こんにちは、震災の応答をありがとう。ページ3に移動するときにページ1を失う問題.... – DioNNiS

+0

@DioNNiSそれは別の問題です。 'page2'にポーラーを追加すると、' page1'(と 'page3')にその存在を定期的に報告します。これは 'setInterval(function(){window.opener.page2 = window;}、1000);'などを使って行うことができます。また、ウィンドウが閉じられたときにも報告します: 'window.onunload = function(){window.opener.page2 = null;};'。以前にも同様の質問がありましたが、私はそれに応えました(http://stackoverflow.com/a/7704292/938089?doing-pupups-correctly)。 –

+0

はい、これは唯一の適切な解決策だと思われます – DioNNiS