cordova inAppBrowser“退出前”事件

时间:2017-06-09 08:13:14

标签: javascript android cordova inappbrowser

我有一个带有窗口弹出窗口的cordova(android)应用程序,使用window.open javascript,当设备准备就绪时会覆盖cordova inAppBrowser,请参阅下面的代码:

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

然后我想设置一个事件,当用户按下电话后退按钮或按“x”按钮关闭弹出窗口时会弹出一个对话框并在关闭窗口弹出窗口之前询问“你确定吗?是/否”。代码如下所示:

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

但它不能正常工作,弹出窗口关闭然后对话框提示用户...如何显示对话框并决定是否关闭弹出窗口。

注意:抱歉语法不好,我会尽力解释我的问题。

1 个答案:

答案 0 :(得分: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()功能

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

    我基本上只是在按下后退按钮时检查inappbrowser时创建一个警告对话框。