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

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

ただいまの
回答率

90.02%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 237

shami5

score 1

前提・実現したいこと

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だけ...

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • miyabi_takatsuk

    2019/10/20 23:51

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

    キャンセル

  • shami5

    2019/10/21 23:37

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

    キャンセル

回答 1

checkベストアンサー

0

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

navigator.notification.confirm('画面を切り替えますか', idx => {
  // OK以外のときは何もしない
  if(idx !== 1) return;

  // FIXME: 遷移処理実装
});

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/21 22:39

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

    キャンセル

  • 2019/10/21 23:15

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

    キャンセル

  • 2019/10/21 23:44

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

    キャンセル

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

  • ただいまの回答率 90.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる