ウィンドウを探す前にwindow.openで開かれました
-
20-09-2019 - |
質問
私たちは、単一のドメインから実行し、次のような状況を持ってます:
ページAは、名前のウィンドウ(ポップアッププレーヤー)を開くためにwindow.open()
を使用しています。 window.open()
はページAにウィンドウへの参照を与えます。
ユーザーは、今という名前のウィンドウへの参照が失われたページAをリロードします。ウィンドウを「見つける」ためにwindow.open()
を使用すること(望ましくない)、それをリロードの不幸な副作用があります。このウィンドウへの参照を取得する他の方法はありますか?
解決
これを試してください:
var playerUrl = 'http://my.player...';
var popupPlayer= window.open('', 'popupPlayer', 'width=150,height=100') ;
if(popupPlayer.location.href == 'about:blank' ){
popupPlayer.location = playerUrl ;
}
popupPlayer.focus();
これは、固有の名前を持つ空のウィンドウが開きます。 URLは空白になっているので、ウィンドウの内容がリロードされません。
他のヒント
私の知る限り、無ありません..
種類・オブ・汚い・しかし-iは、推測 - それは、意志-作業ハックは、定期的にこのコードのようなもので、いるwindow.openerを使用して、ポップアップ内から親ウィンドウへの参照をリセットするには、次のようになります。
setInterval(function() { if(window.opener) { window.opener.document.myPopupWindow = window } }, 100)
親ウィンドウでは、あなたもリロード(再読み込みした後も、100ミリ秒)の後、document.myPopupWindowにアクセスできるようになります。これは、クロスブラウザを動作するはずです。
実際に何をやったことは、それが元の親への複数の基準を持っていないので、したがって、あなたは直接の参照を取得することはできません、作成したウィンドウ(ポップアップ)の(ページA)親を破壊されます。
私は考えることができる唯一の解決策は、あなたがアクティブなウィンドウ(タブ)と特殊な性質を持っているものを見つける(すなわち:あなたのリロードページA)を循環するためにJavaScript機能を追加していますブラウザ使用されるポップアップで認識されますます。
残念ながら、私はFirefoxはあなたにこの柔軟性を提供し、いくつかの追加機能や拡張機能を持っていると思います。 (それはしかし、セキュリティ上のリスクである)
この作業をする必要があります。ポップアップでこのコードを追加します:
function updateOpener() {
if (window.opener)
window.opener.document.myPopupWindow = window;
else
setTimeout(updateOpener, 100);
}
updateOpener();
そして、この親ウィンドウのonloadイベントインチそれにアクセスする前に100ミリ秒を待つ設定されていることを確認myPopupWindowようにするには。
setTimeout(function() {
if (document.myPopupWindow)
document.myPopupWindow.focus();
}, 100);