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/
添加所需的导入:
导入 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();
}
}
}
收件人:
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 的基础上创建一个警告对话框。
我有一个带有 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/
添加所需的导入: 导入 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();
}
}
}
收件人:
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 的基础上创建一个警告对话框。