【问题标题】:cordova inAppBrowser "Before Exit" eventcordova inAppBrowser“退出前”事件
【发布时间】:2017-06-09 08:13:14
【问题描述】:

我有一个带有窗口弹出的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'          
              );

但它没有按我的意愿工作,弹出窗口关闭然后对话框提示用户...如何显示对话框并决定是否关闭弹出窗口。

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

【问题讨论】:

  • inAppBrowser 关闭时会触发exit 事件,因此届时您无能为力
  • 那么有没有办法处理这样的事件?
  • exit只是为了知道什么时候关闭的,不修改插件原生代码是无法阻止的。
  • 我明白了,有没有这方面的指南?
  • 据我所知,没有指南。在 Android Studio 中,您可以打开 yourProject/platforms/android 文件夹并编辑 InAppBrowser.java 文件。也许插件创建指南会很有用cordova.apache.org/docs/en/latest/guide/hybrid/plugins/…

标签: javascript android cordova inappbrowser


【解决方案1】:

我找到了一个相当简单的解决方案(android),用于简单提示,例如“你确定”“是/否?”通过编辑 inappbrowser.dialog.java 文件。这个方案只是在关闭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 之上创建一个警报对话框。

【讨论】:

  • 我的 /platforms 中没有 /android。这是为什么?我应该如何生成它?谢谢。
  • 您的cordova项目中可能没有android平台。打开您的终端并“cd”您的 cordova 项目(带有 config.xml 文件),然后输入“cordova platform ls”,它将列出您的项目拥有的所有平台。您可以参考cordova cli guide中的“平台”部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 2016-11-29
  • 2017-01-03
相关资源
最近更新 更多