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

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

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

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

Q&A

解決済

2回答

5196閲覧

javascriptのwindow.openメソッドについて

runban

総合スコア152

JavaScript

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

0グッド

1クリップ

投稿2022/05/26 03:49


モーダルを表示するためにwindow.openメソッドを使用しています。
現状非同期で処理が実行されるのですが、これを同期で処理を実行することは可能でしょうか。
下記は現在実行中のwindow.openになります。

url = "遷移したいページを指定"; window.open(url, window, "width=300,height=200,top=250,left=500");

お手数をおかけしますが、
ご教示のほど何卒よろしくお願いいたします。


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

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

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

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

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

maisumakun

2022/05/26 04:12

> これを同期で処理を実行することは可能でしょうか。 何と何を同期させたい、という話でしょうか。
runban

2022/05/26 04:20

失礼いたしました、openメソッドでモーダルが開かれてから閉じるまでを同期で実行させたいです。 また、openで開いた先にurlにモーダルを閉じるcloseメソッドを記載しています。
yambejp

2022/05/26 04:30 編集

openメソッドの第二引数にwindowを指定しているのはどういう意図でしょうか?
runban

2022/05/26 04:37

yambejpさん 親画面の情報を渡してあげる必要があるみたいなので、windowを設定しております。 大変申し訳ございませんが、詳しくはわかりません、
guest

回答2

0

ベストアンサー

昔は showModalDialog() というものがあったのですが、Google Chrome と Firefox からは削除されてしまいました。

「ウィンドウが閉じるまでブロックする」という処理はできませんが、(開いたウィンドウが同一オリジンなら) async/await で逐次的なコードにすることは可能かと思います。

投稿2022/05/26 04:49

編集2022/05/26 04:50
int32_t

総合スコア21927

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

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

runban

2022/05/26 04:58

ありがとうございます! 下記の通りコードを修正したのですが、正しく処理が動作しません、 続けての質問で大変申し訳ないのですが、下記コードで違和感のあるところがあれば、ご教示頂けますと幸いですm(__)m function modal() { return new Promise((resolve, reject) => { var url = ""; url = "遷移するURL"; window.open(url, window, "width=300,height=200,top=250,left=500"); } } async function openWaitingWin() { await modal(); //modal()の後に次に実行させたい処理 ○○ }
int32_t

2022/05/26 05:01

window.open() で開いたページの中で、ウィンドウを閉じるときに何らかの手段でこの Promise の resolve() を呼ぶ必要があります。
runban

2022/05/26 05:25

ご回答ありがとうございます! 下記コードがopen()を開いた先でモーダルを閉じる処理を書いておりまして、resolve()を実行してみたのですがうまくいきません、、 続けてで大変申し訳ございませんが、下記コードで違和感のあるところがあれば、ご教示頂けませんでしょうかm(__)m (window.opener.Promise().resolve()で呼び出し元のresolveを開くようにしています) ScriptManager.RegisterStartupScript(Me, Me.GetType(), "Close", "open('about:blank', '_self').close();window.opener.setValue(1);window.opener.Promise().resolve()", False)
int32_t

2022/05/26 05:39

modal() の中で new している Promise のコールバックに指定された resolve 引数のことなので、window.opener.Promise().resolve では参照できません。 スマートではないですが一番簡単なのは、modal() の Promise の中で 「window.modalResolve = resolve」とでもして、「window.opener.modalResolve()」を呼ぶことでしょうか。setValue() の中で呼んでもいいかもですね。
runban

2022/05/26 14:24

ありがとうございます!!
guest

0

window.openで同期処理というのは合理的な素案だとはおもえません
またwindow.open自体モーダルではなくモードレス処理なので命題には合わないと思います。

sample

別ページをモーダルで開きたいならdialog+iframeでどうでしょう?

javascript

1<style> 2dialog{ 3padding:0; 4} 5dialog iframe{ 6border:0px solid; 7} 8</style> 9<script> 10window.addEventListener('DOMContentLoaded', ()=>{ 11 btn.addEventListener('click',()=>{ 12 modal.open=1; 13 }); 14}); 15</script> 16<dialog id="modal"> 17<iframe src="sample.html"></iframe> 18</dialog> 19<input type="button" value="btn" id="btn">

//sample.html

javascript

1<style> 2body{ 3margin:0; 4padding:0; 5} 6</style> 7test 8<input type="button" value="close" onclick="top.modal.open=null">

投稿2022/05/26 04:29

編集2022/05/26 05:18
yambejp

総合スコア117615

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問