質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

2430閲覧

Edgeでwindow.open()で開いた親ウィンドウを閉じても子ウィンドウを正常に動かしたい

mimon

総合スコア15

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2023/01/31 05:37

編集2023/01/31 08:55

前提

visual studio2019
asp.net
Edge

asp.netでWebシステムを作成しています。
現在IEモードで使用しておりEdgeへの移行作業中です。

IEで使用時はjavascriptでwindow.open()を使用し、ログイン画面を最大化、戻るボタンやツールバーなどを非表示とし、Webシステムというよりはwindowsアプリのような見せ方をしていました。

以下、WebForm1.aspxファイルの中身です。
(aspxタグだと色がつかないのでjavascriptタグで記載します)

javascript

1// WebForm1.aspx 2<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication5.WebForm1" %> 3 4<!DOCTYPE html> 5 6<html xmlns="http://www.w3.org/1999/xhtml"> 7<head runat="server"> 8<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 9 <title></title> 10 <script type="text/javascript"> 11 function OnLoad() { 12 // 実際に有効な画面サイズ 13 var ash = window.screen.availHeight; 14 var asw = window.screen.availWidth; 15 16 url = 'WebForm2.aspx'; 17 // スクリプトでWebForm2をオープン 18       // 画面サイズとツールバーなどの見た目を制御するため 19 newWin = window.open(url, 'child', 'toolbar=0,location=0,menubar=0,status=1,scrollbars=1,resizable=1'); 20 newWin.moveTo(0, 0) 21 newWin.resizeTo(asw, ash); 22 } 23 function OnForceClose() 24 { 25 var w = window.open("about:blank", "_self"); 26 w.opener = window; 27 // edgeではCloseされません!閉じずにこの画面が残ります 28 w.close(); 29 } 30 </script> 31</head> 32<body onload="Javascript: OnLoad(); OnForceClose();"> 33 <form id="form1" runat="server"> 34 <div> 35 </div> 36 </form> 37</body> 38</html> 39

以下はopen.windowで開いたWebForm2.aspxファイルの中身です
クリックイベント用にボタンをひとつ配置しています。

javascript

1// WebForm2.aspx 2<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication5.WebForm2" %> 3 4<!DOCTYPE html> 5 6<html xmlns="http://www.w3.org/1999/xhtml"> 7<head runat="server"> 8<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 9 <title></title> 10</head> 11<body> 12 <form id="form1" runat="server"> 13 <div> 14 </div> 15 <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 16 </form> 17</body> 18</html>

IEではこのコードでWebForm1を閉じることができ、閉じてもWebForm2に影響はなく、WebForm2がメインとなってシステムが動くイメージです。

今回Edgeへの移行の際、window.open()で開いたウィンドウしかスクリプトでは閉じることができない(スクリプトで開いたものしかスクリプトで閉じられない)ことがわかり、呼び出し元のWebForm1が残るのは許容することにしました。

しかし、WebForm2が開いた状態でWebForm1を先に手動で閉じるとWebForm2のセッションが切れるようで、WebForm2でボタンクリックなどイベント操作を行うと
(WebForm1が表示されているEdgeを閉じてWebForm2のボタンをクリックする)

申し訳ございません。このページに到達できません
localhost により、接続が拒否されました。

というエラー画面が表示されるようになりました。
IEでは親ウィンドウを閉じても子ウィンドウに影響はなかったのですが、
Edgeでは仕様上、無理なのでしょうか?
何か方法があると助かるのですが・・・。
(後ろに隠れている呼び出し元ウィンドウが何かのはずみで前に出てきた時に、邪魔なので閉じたところ、その後子ウィンドウで画面操作を行うとエラーが発生し気が付いた次第です)

ちなみに開発環境(VisualStudio)でのみの検証です。
ですのでlocalhostでIISExpressで動かしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/01/31 05:46

ASP.NET とどういう関係があるのですか? ASP.NET Web アプリがレンダリングした html と言うだけで、ASP.NET とは直接の関係はないように見えます。関係なければタグは外してください。関係あるのならどこがどのように関係しているのかを具体的に書いてください。
mimon

2023/01/31 05:53

申し訳ございません。 単純にASP.NETで作成しているという意味で追加してしましました。 タグ外したいんですが、どこで編集すればよいのかわからないのでこれから調べます。 以後気を付けます。
退会済みユーザー

退会済みユーザー

2023/01/31 06:12

> 子ウィンドウでボタンクリックなどイベント操作を行うと というところが、ASP.NET Web Forms アプリでポストバックしてサーバー側の C# (または VB.NET) のコードで発生するイベントかもしれないとは気にはなったのですが・・・ そういう話ではなくてクライアント側だけの問題で ASP.NET は全く関係ないのであれば ASP.NET のタグは削除してください。 ASP.NET に関係有る無いの如何にかかわらず、問題を再現できる必要最低限のサンプルコードを作って提示することをお勧めします。
mimon

2023/01/31 06:16

はい、すみません。 タグの削除方法がわからず、今運営に質問メールをしたところです。 少々お待ちください。
mimon

2023/01/31 06:31

不適切なタグを削除しました。 大変失礼いたしました。
退会済みユーザー

退会済みユーザー

2023/01/31 07:14 編集

上に書きましたが、問題を再現できる必要最低限のサンプルコードを作って提示することをお勧めします。あくまで必要最低限のコードでかつコピペすれば動くのが望ましいです。今質問にある情報だけでピンポイントに答えが出せる人はエスパーかも。
mimon

2023/01/31 08:10

わかりずらく申し訳ございません。 aspxファイルのコードを記載しました。
退会済みユーザー

退会済みユーザー

2023/01/31 08:21

話が通じてないのでは? 先のコメントで、 > 子ウィンドウでボタンクリックなどイベント操作を行うと というところが、ASP.NET Web Forms アプリでポストバックしてサーバー側の C# (または VB.NET) のコードで発生するイベントかもしれないとは気にはなったのですが・・・ と書きましたが、質問に追加したコードの、 > <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> で何が起きるのかというと、ポストバックされて OnClick="Button1_Click" で設定されているサーバー側の C# (または VB.NET) のコードで発生する Click イベントで Button1_Click ハンドラが動くのですよ。そこのところは ASP.NET と関係大ありです。そのあたりが理解できてないと話が通じないので勉強してから出直してください。
mimon

2023/01/31 08:31

質問はjavascriptでwindow.openした場合、IEだと呼び出し元を消しても子ウィンドウが動くのに、edgeだと子ウィンドウで操作ができなくなるのを防ぐ方法はありますか?という点です。 IEだとButton1_Clickのサーバーサイドイベントも問題なく動きます。 ではasp.netタグをつけておいた方がよかったですかねぇ。
退会済みユーザー

退会済みユーザー

2023/01/31 08:38

サーバーサイドで起こっていることとクライアントサイドで起こっていることが区別できてないように思われます。そのあたりが理解できてないと話が通じないので勉強してから出直してください。
mimon

2023/01/31 08:44

はい。クライアントサイドとサーバーサイドのはざまで起こっているような現象なんですよね。 IEでは起きなかったので困っています。
guest

回答1

0

ベストアンサー

質問に貼ってあったコードをコピペして試してみましたが質問者さんの言う問題は再現しません。

なので、何かの間違いか、質問に書いてないコードがあってそれの影響か、質問者さん固有の環境の問題だと思います。

どのように試したかを以下に書いておきます。ブラウザは Windows 10 22H2 の Microsoft Edge バージョン 109.0.1518.70 (公式ビルド) (64 ビット) です。

まず、質問のコードではブラウザのポップアップブロックに引っかかって子 (WebForm2.aspx) は開きません。

表示されたということですのでブラウザの設定でポップアップを許可したのだろうと思いますが、そうすれば以下のように親子両方開きます。(自分の環境では WebForm の名前は WebForm1.aspx ⇒ WebForm16.aspx、WebForm2.aspx ⇒ WebForm17.aspx に変えてます)

イメージ説明

上の画像の赤丸の×ボタンをクリックして親を閉じてから子の Button をクリックします。問題なくポストバックされて応答が返ってきます。

イメージ説明

子には Label を追加して Button1_Click イベントハンドラで Label1.Text = "Button1_Click ハンドラが動いた"; としています。なので、サーバー側で Button1_Click イベントハンドラが動いて以下の通りとなります。

イメージ説明

質問者さんはサーバーサイドで起こっていることとクライアントサイドで起こっていることが区別できてないとか基本的な知識が不足しているように思われます。そのあたりを勉強して、何が起こっているのかを調べてください。

投稿2023/02/01 02:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimon

2023/02/01 03:19

SurferOnWwwさん、テストまでしていただいてお時間いただき本当にありがとうございます。 実は昨日あれからVisualStudioでIISExpressでデバックしていたものをlocalIISでデバックするように変えたところ、SurferOnWwwがおっしゃる通り問題なくポストバックできました。 どうやらIISExpressでのデバック時のみの現象だったようです。 明日にでもTPをWindowsServerに設定して再テストしてみるつもりですが、開発環境のIISに設定してURLを直接叩いても問題なかったので多分大丈夫だと思います。 昨日から大騒ぎしてSurferOnWwwのお時間も頂戴してしまい大変申し訳なく思っています。 質問の記述もなるべく回答が多くいただけるよう今後はご指摘いただいたことに注意していきたいと思います。 本当にありがとうございました。
退会済みユーザー

退会済みユーザー

2023/02/01 03:29

> どうやらIISExpressでのデバック時のみの現象だったようです。 上の回答の検証でも Visual Studio 2022 から実行して IIS Express 上で動かしているのですが?
mimon

2023/02/01 05:46 編集

本当ですか!? そうなるともうわかりませんが(ちなみにこちらはVS2019です)、 となるとこちらの固有の環境の問題だと思います。 色々ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問