mR.Angular
mR.Angular

Reputation: 65

cordova inAppBrowser "Before Exit" event

I have a cordova (android) app with window popout using window.open javascript that override with cordova inAppBrowser when device is ready refer to the code below:

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

Then i want to set an event when user press phone back button or press "x" button to close the popout a dialog will pop out and asked "Are you sure? Y/N" before closing window popout. The code look like this:

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'          
              );

But it doesn't work as i wanted, the popout window closed then dialog is prompt to user...How can i show a dialog and decides whether to close popout window.

Note: Sorry for bad grammar, i try my best to explain my problem.

Upvotes: 2

Views: 3156

Answers (1)

mR.Angular
mR.Angular

Reputation: 65

I have found a fairly easy solution (android) for simple prompt like "Are you sure" "yes/no?" by editing the inappbrowser.dialog.java file. This solution is only prompting for confirmation before closing inappbrowser, which is suitable for my case.

Modify the java file InAppBrowserDialog.java in this location:

[your cordova project]/platforms/android/src/org/apache/cordova/inappbrowser/
  1. ADD REQUIRED IMPORTS: import android.content.DialogInterface;

  2. MODIFY THE onBackPressed() FUNCTION

FROM:

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();
}

I basically just create an alert dialog on top of checking for inappbrowser when back button is pressed.

Upvotes: 1

Related Questions