Web アプリケーションには、ロギング コンテンツが読み込まれるオプションのポップアップ ウィンドウがあります。このウィンドウは、Javascript を使用して開きますwindow.open()
。
ユーザーは通常、アプリケーションの複数のタブを開いています。私の意図は、ポップアップをトリガーするタブに関係なく、常に同じポップアップ ウィンドウ (現在開いている場合) を再利用することです。そのために、次のようなコードを使用してポップアップを開きます。
<script>
function myFunction() {
var myWindow = window.open("popup.html", "my_popup", "width=600,height=400,status,resizable");
}
</script>
これは Firefox と IE で正常に動作します。ポップアップ ウィンドウは 1 つしか開かれず、ログに記録したいすべてのコンテンツがそのウィンドウに読み込まれます。
ただし、Chrome と Safari では、ポップアップを起動するタブに応じて異なるポップアップ ウィンドウを使用します。
の 2 番目のパラメーターはwindow.open()
、ほとんどのブラウザーに当てはまるように、グローバル名前空間からターゲット名を指定すると想定しました。しかし、Chrome と Safari は、これらのターゲット名にタブ固有の名前空間があるかのように動作します。つまり、タブ 1 から参照される「my_popup」は、タブ 2 からの「my_popup」とは異なるターゲットを参照します。 「複製」は同じ名前空間を共有しているように見えます。つまり、同じポップアップ ウィンドウを再利用しますが、それ以外の方法で作成されたタブは再利用しません。)
Chrome と Safari のこの動作を回避し、ユーザーが開いているすべてのタブから同じポップアップ ウィンドウにアクセスする方法はありますか?
それとも、これは回避策がないように見えるブラウザ固有の動作であると想定する必要がありますか?
これをさまざまなブラウザーでテストしました。
IE 11.0.9600.18204
同じドメインのコンテンツを含むすべてのタブで、1 つの共有ポップアップ ウィンドウを開く/リロードする (つまり、ターゲット名前空間がドメインごとにローカルに見える)。
URL からのコンテンツを含むすべてのタブは、ローカル イントラネットを指す URLfile://
からのコンテンツを含むタブと同じポップアップ ウィンドウを再利用します。http://
Firefox 46.0.1
同じドメインのコンテンツを含むすべてのタブで、単一の共有ポップアップ ウィンドウを開く/リロードする (つまり、ターゲット名前空間がドメインごとにローカルに見える)。
URLからのコンテンツを含むすべてのタブはfile://
、独自の単一の共有ポップアップ ウィンドウを使用します (つまりfile://
、URL には独自のターゲット名前空間があるようです)。
Edge 20.10240.16384.0
動作に一貫性がありません。ほとんどのテストでは、Edge は Firefox のように動作しましたが、Chrome のように動作することもありました。
とりあえずEdgeを無視しても問題ありません。
Chrome 50.0.2661.94
各タブが独自のポップアップ ウィンドウを開くか再読み込みします (つまり、ターゲット名前空間はタブごとにローカルにあるようです)
Safari 9.1
各タブは、独自のポップアップ ウィンドウを開くかリロードします (つまり、ターゲット名前空間はタブごとにローカルのようです)
ところで、これらすべてのブラウザで、ポップアップ ウィンドウがユーザー インタラクションによって起動されたかどうかに依存する動作はありませbody onload()
んbutton onclick()
。
[ここに、問題に関連しないと思われる追加の背景情報がありますが、誰が知っているのか... ;-)
実際には、アプリケーションはポップアップ ウィンドウを直接開くのではなく、ログ ウィンドウを開く log4javascript を使用しています (またはChrome の場合: 複数のログ ウィンドウ)。log4javascript コードを拡張してこれに対処し、メンテナにパッチを送りますが、そのためには上記の基本的な問題を解決する必要があります]