У меня есть приложение 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'
);
Но он не работает так, как я хотел, окно всплывающего окна закрывается, тогда диалог запрашивает пользователя... Как я могу показать диалог и решает, закрыть ли окно всплывающего окна.
Примечание: Извините за плохую грамматику, я стараюсь изо всех сил объяснить мою проблему.
Я нашел довольно простое решение (android) для простого приглашения типа "Вы уверены" "да/нет?" редактируя файл inappbrowser.dialog.java. Это решение только подсказывает подтверждение перед закрытием inappbrowser, что подходит для моего случая.
Измените java файл InAppBrowserDialog.java
в этом месте:
[your cordova project]/platforms/android/src/org/apache/cordova/inappbrowser/
ДОБАВИТЬ НЕОБХОДИМЫЕ ИМПОРТЫ: import android.content.DialogInterface;
ИЗМЕНИТЬ ФУНКЦИЮ 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 при нажатии кнопки "Назад".