Cordova inAppBrowser Событие «До выхода»

1

У меня есть приложение cordova (android) с всплывающим окном с использованием window.open javascript, который переопределяет кордону inAppBrowser, когда устройство готово, ссылается на код ниже:

 document.addEventListener("deviceready", onDeviceReady, false);
 function onDeviceReady() {
    window.open = cordova.InAppBrowser.open;
}

Затем я хочу установить событие, когда пользователь нажимает кнопку "Назад" или кнопку "x", чтобы закрыть всплывающее окно. Появится диалоговое окно, в котором вы спросите "Уверены ли вы? Y/N" перед закрытием всплывающего окна. Код выглядит так:

var newwindow;
newwindow = window.open('something', '_self ', 'location=no'); 
newwindow.addEventListener('exit', function(event){ Exit() });
 function Exit(){
              navigator.notification.confirm(
                'Are you sure?',  
                function(i){
                    if(i==2)
                     {
                      //exit the window popout
                     }
                },              
                'App Name',            
                'Cancel,Exit'          
              );

Но он не работает так, как я хотел, окно всплывающего окна закрывается, тогда диалог запрашивает пользователя... Как я могу показать диалог и решает, закрыть ли окно всплывающего окна.

Примечание: Извините за плохую грамматику, я стараюсь изо всех сил объяснить мою проблему.

Теги:
cordova
inappbrowser

1 ответ

1
Лучший ответ

Я нашел довольно простое решение (android) для простого приглашения типа "Вы уверены" "да/нет?" редактируя файл inappbrowser.dialog.java. Это решение только подсказывает подтверждение перед закрытием inappbrowser, что подходит для моего случая.

Измените java файл InAppBrowserDialog.java в этом месте:

[your cordova project]/platforms/android/src/org/apache/cordova/inappbrowser/
  1. ДОБАВИТЬ НЕОБХОДИМЫЕ ИМПОРТЫ: import android.content.DialogInterface;

  2. ИЗМЕНИТЬ ФУНКЦИЮ onBackPressed()

ИЗ:

public void onBackPressed () {
    if (this.inAppBrowser == null) {
        this.dismiss();
    } else {
        // better to go through the in inAppBrowser
        // because it does a clean up
        if (this.inAppBrowser.hardwareBack() && this.inAppBrowser.canGoBack()) {
            this.inAppBrowser.goBack();
        }  else {
            this.inAppBrowser.closeDialog();
        }
    }
}

TO:

public void onBackPressed() {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context)
        .setTitle("Exit")
        .setMessage("You are about to exit, are you sure?")
        .setPositiveButton("Exit", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which){
                if (inAppBrowser == null) {
                    dismiss();
                } 
                else {
                    // better to go through the in inAppBrowser
                    // because it does a clean up
                    if (inAppBrowser.hardwareBack() && inAppBrowser.canGoBack()) {
                        inAppBrowser.goBack();
                    }  else {
                        inAppBrowser.closeDialog();
                    }
                }
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog,int which){
                dialog.cancel();
            }
        });
        alertDialogBuilder.create();
        alertDialogBuilder.show();
}

В основном я просто создаю диалоговое окно предупреждения поверх проверки для inappbrowser при нажатии кнопки "Назад".

  • 0
    У меня нет / Android в моих / платформ. Почему это? Как мне это сгенерировать? Благодарю.
  • 0
    Вероятно, у вас нет платформы Android в вашем проекте Cordova. Откройте свой терминал и «cd» свой проект cordova (с файлом config.xml), затем введите «cordova platform ls», он перечислит все платформы, которые есть у вашего проекта. Вы можете обратиться к разделу «Платформа» в руководстве пользователя cordova cli.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню