cordova inAppBrowser "Before Exit" 事件

cordova inAppBrowser "Before Exit" event

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

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

然后我想设置一个事件,当用户按下 phone 后退按钮或按下 "x" 按钮关闭弹出窗口时,将弹出一个对话框并在关闭前询问 "Are you sure? Y/N" window 弹出窗口。代码如下所示:

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

但它没有像我想要的那样工作,弹出窗口 window 关闭然后对话框提示给用户...我如何显示对话框并决定是否关闭弹出窗口 window。

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

我找到了一个相当简单的解决方案 (android),通过编辑 inappbrowser.dialog.java 文件来处理像 "Are you sure" "yes/no?" 这样的简单提示。这个方案只是在关闭inappbrowser前提示确认,适合我的情况。

在此位置修改 java 文件 InAppBrowserDialog.java

[your cordova project]/platforms/android/src/org/apache/cordova/inappbrowser/
  1. 添加所需的导入: 导入 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();
        }
    }
}

收件人:

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 的基础上创建一个警告对话框。