Unexpected behavior of pop-up in Edge's IE mode when closing it

星田 知子 25 Reputation points
2025-10-01T01:45:59.73+00:00

画面A(親) ⇒  画面B(子) ⇒  画面C(孫)

⇒はポップアップ表示

上記状態で画面C(孫)の戻るリンク(window.close();のみ)押下で、

画面B(子)が裏側に回り、画面A(親)が最前面に表示されます。

※期待結果は、画面Bが最前面に表示されること。

ポップアップ表示は

var aaaa = window.open('対象画面','画面名','オプション指定');

にてポップアップ表示しています。
 

【環境】

Edge(IEモード)

Windows 累積パッチ(KB5065426)

Microsoft Edge (140.0.3485.66)

.Net Framework 4.8.1 (KB5064401)

適用(上記パッチ)で上記画面の表示順が変更になってしまいました。

上記不正が発生している原因と解消方法をご教授いただきたいです。

Microsoft Edge | Website issues | Windows 11
0 comments No comments
{count} vote

Answer accepted by question author
  1. Jack Dang (WICLOUD CORPORATION) 2,400 Reputation points Microsoft External Staff
    2025-10-02T04:22:37.3366667+00:00

    @星田 知子 様、こんにちは。

    お問い合わせありがとうございます!

    ご説明いただいた内容からすると、問題は(画面 A → 画面 B → 画面 C で、C を閉じると B ではなく A が前面に出てしまう)Edge の IE モードでのウィンドウフォーカスの扱いに関係しており、最新の Windows アップデート (KB5065426) の後に発生しているようです。

    状況の説明

    1. 3つのポップアップ画面があります:
      • A(親)B(子)C(孫)
    2. C で次のコードを実行しています:
    window.close();
    
    1. 期待される動作: C を閉じたら B が前面に表示される。
    2. 実際の動作: A が前面に出て、B は背後に残る。

    なぜこうなるのか

    • Edge IE モードは旧 IE エンジンを Edge 内で動かしているため、フォーカスのルールは古い IE と同じではありません。
    • アップデート後、ポップアップを閉じたときにどのウィンドウがフォーカスされるかの決定方法が変わったようです。
    • その結果、C を閉じると B ではなく A が前面に出ることがあります。
    • これは .NET コードの問題ではなく、ブラウザ側の挙動の変化です。

    例えると紙の山のようなものです: C が一番上、B がその下、A が一番下にあります。C を置いて B を手に取るつもりが、下の A が飛び出してくる感じです。

    修正方法

    C を閉じる前に、ブラウザにどのウィンドウを前面に出すかを明示的に指示できます。

    1. C の閉じるコードを変更:

    if (window.opener && !window.opener.closed) {
        try {
            window.opener.focus();  // B を前面に表示
        } catch (e) {
            // エラーが出ても無視
        }
    }
    window.close();  // その後 C を閉じる
    

    2. 任意: 少し遅延を入れる

    setTimeout(() => {
        if (window.opener && !window.opener.closed) {
            window.opener.focus();
        }
        window.close();
    }, 50);  // 50ミリ秒
    

    これにより、アップデート後の Edge IE モードでも B が確実に前面に表示 されます。

    追加のヒント

    • アップデートが適用されていない環境でテストして、違いを確認してみてください。
    • ポップアップの設定(ウィンドウ名や機能)を一貫して使用すると、親子関係が正しく維持されます。
    • 必要に応じて、B が C の終了を検知(onunload やポーリング)して、自動的に前面に出るようにすることもできます。

    参考になれば幸いです!もし役に立った場合は、他の方のために解決済みとしてマークしてみてください。


0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.