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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

JavaScript

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

2回答

3302閲覧

[Javascript]iOSアプリでwindow.confirm()でダイアログを出している最中に後続処理が走ってしまう

shami5

総合スコア5

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

JavaScript

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

2クリップ

投稿2019/10/20 14:23

編集2019/10/21 14:51

前提・実現したいこと

confirm()によって表示されるダイアログのYesNoの選択結果に応じて画面遷移の有無を制御したい。

発生している問題・エラーメッセージ

ボタンをタップした際に以下のような処理が走るボタンを実装したところ、iphone上のmonacaデバッガー(9.0.1)でconfirmのダイアログは表示されるもののYesを選択してもconfirmFlgがtrueの判定にならず、サイドボタンをタップすると画面遷移が起こり、遷移後に2回目のconfirmダイアログ表示がされてしまいます。
期待値は1回ボタンをタップしてconfirmダイアログでYesを選択した場合すぐに画面遷移をして欲しいのですが...

var confirmFlg = window.confirm("画面を切り替えますか?"); if(confirmFlg == true){ window.location.href = "Aページへのリンク"; }else{ //何もしない }

試したこと

・confirmFlgがtrue以外であった場合のフローに「alert("false");」を差し込んで実行したところ、1回目のタップでは以下の順でダイアログが表示された。
①alertダイアログ
②confirmダイアログ
このconfirmダイアログでYesを選んでも画面遷移は起こらず、再度ボタンをタップするとその瞬間画面遷移が発生した。ちなみにmonaca localkit上でのシミュレータ上では1回目のボタンタップで画面遷移が発生し、alertダイアログはそもそも表示されなかった。
→ ・iOS特有?
・confirmダイアログの選択結果を受け取る前に後続の処理が走っている?
・コード順で言うとconfirmダイアログ、alertダイアログの順なのに表示順は逆
→ダイアログを出す命令がコード順で溜め込まれて、先入れ後出しで実行されている??

補足情報(FW/ツールのバージョンなど)

アプリのcordovaのバージョン:9.0
テストデバイス:iphone x(iOS13.1)
monacaデバッガーのバージョン:9.0.1

すごく基本的な部分で躓いているような気がするのですが、アプリ開発自体初めてでして、皆様のお力をお借りしたく存じます。
よろしくお願いします。

10/21追記
Android端末でデバッグしてところ期待値通りの挙動をしました。
やはりiOSだけ...

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

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

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

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

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

miyabi_takatsuk

2019/10/20 14:51

おそらく、Swiftにコンパイル時に処理の仕方が変わっているのかと思うのですが・・・、 Monaca詳しくなく恐縮なのですが、 Swiftにコンパイル後の、該当箇所の実ソースコードは見れたりするのでしょうか? もし見れるのであれば、その実コードを記載した方が、回答を得られやすいかと思います。
shami5

2019/10/21 14:37

ご指摘ありがとうございます。 コンパイル後のソースを見ようと、ビルド後の.appファイルを展開して覗いてみましたがhtmlファイルもjsファイルも元ソースがそのまま入っていました。 swiftに翻訳されるわけじゃないのですかねー
guest

回答2

0

こちら, 解決済みでしょうか?

iOS13.3で同じような問題にあたっており、調べてみたところ

  1. window.alert()はsynchronous(同期処理)なのに対し、navigator.notification.alert()は非同期処理

  2. そのため、shami5さんの実現したいことを考えるとwindow.alert()を利用するか、navigator.notification.alert()のcallbackに後続処理を実行する関数を仕込む必要がありそうです。

▼参考
https://books.google.co.jp/books?id=O52yBwAAQBAJ&pg=PA328&lpg=PA328&dq=cordova+dialogs+pause&source=bl&ots=x7MF3riOm4&sig=ACfU3U0UyTHZdoTazAWXOm4ACU-jpi_qhQ&hl=ja&sa=X&ved=2ahUKEwjLlprd8sXnAhWQ3mEKHaPnCVwQ6AEwB3oECAkQAQ#v=onepage&q=cordova%20dialogs%20pause&f=false

しかし、iOS13系ではJavascriptのsuspendが出来ない不具合があるようで、window.alert()のダイアログが出ている際も後続処理が走ってしまうようです。

私も同じ問題に当たっていたので、上記共有しました。

可能でしたら、その後どのように対応なされたのか共有いただけましたら幸いです。

投稿2020/02/10 02:57

YK_twit

総合スコア13

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

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

0

ベストアンサー

Monacaは使ったことがないですが、ドキュメントを見るに、navigator.notification.confirm() を使うのではないですか?

js

1navigator.notification.confirm('画面を切り替えますか', idx => { 2 // OK以外のときは何もしない 3 if(idx !== 1) return; 4 5 // FIXME: 遷移処理実装 6});

投稿2019/10/21 03:41

thyda.eiqau

総合スコア2982

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

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

shami5

2019/10/21 13:39

ご回答ありがとうございます。 ケチるなと言う話なのですがnotificationが含まれるcordovaプラグインは有料オプションなので試せないです... もう少し試して方法がなさそうだったら課金して試してみます。情報ありがとうございます。
thyda.eiqau

2019/10/21 14:15

え、そうなんですか、すごい商売ですね…… 本題とずれますが、iOSネイティブ (Swift/Objective-C) かReact Nativeなどの他のプラットフォームも検討されてもいいのではと思います。有料プラグインと聞いた直感的感想ですが、ユーザーが少なくてググっても欲しい情報が得られないような気がします
shami5

2019/10/21 14:44

そうですね..Monacaじゃなきゃダメと言うわけではないのでその道も模索してみます。 アドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問