JavaScript中的警告框会在用户触摸空白屏幕时关闭。

5
我遇到了一个简单的问题,我已经尝试在谷歌上寻找解决方案,但是由于搜索关键字的原因,没有找到任何解决方案。我通过JavaScript显示警报框,但是当用户触摸空白(警报窗口外)屏幕时,它会自动关闭,即使没有用户交互也会关闭。这个问题在Android 2.2版本中没有出现,只有在更高版本中才会出现。可能是什么问题?是否有人遇到过这个问题?
下面的代码是小图像的触摸事件。 警报框在屏幕中央弹出,但是当用户触摸警报框窗口外部时,它会关闭。
$('#bombImg').on('touchstart',function(touchEvent) {
        sound = new Media("/android_asset/www/beep2.mp3");
        sound.play();
        document.getElementById('resetBtn').disabled = false;
        document.getElementById('trns').style.display = "none";
        document.getElementById('bombImg').style.display = "none";
        document.getElementById('cityImg').style.position = 'absolute';
        document.getElementById('bomb').style.display = "block";
        enableZoomButtons();
        window.alert("Bomb defused");
        touchEvent.preventDefault();
});

这是我的Java代码。
 public class Adventure extends DroidGap {
@SuppressLint({ "SetJavaScriptEnabled", "NewApi" })
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setIntegerProperty("splashscreen", R.drawable.logo);
    // super.setIntegerProperty("splashscreen", R.drawable.splash);
    //super.setStringProperty("loadingDialog", "Loading..");
    super.loadUrl("file:///android_asset/www/index.html", 10000);
    this.setFinishOnTouchOutside(false);
    super.appView.addJavascriptInterface(new JavaScriptInterface(this,
            appView, this), "MyAndroid");
    appView.setOnClickListener(null);
    WebSettings settings = appView.getSettings();
    settings.setBuiltInZoomControls(true);
    settings.setSupportZoom(true);
    settings.setDefaultZoom(ZoomDensity.MEDIUM);
    appView.getSettings().setUseWideViewPort(false);
    appView.getSettings().setJavaScriptEnabled(true);
    // appView.loadUrl("javascript:getValue()");
}    
}      

请有人回答这个问题


请发布您尝试过的代码。 - MusicLovingIndianGirl
你试过使用 alert() 而不是 window.alert() 吗? - MusicLovingIndianGirl
@Aishvarya 是的,实际上我尝试了在搜索后编辑窗口后仅弹出警报,但没有成功。 - Mallikarjun
似乎应该是一个错误或其他问题。 - markasoftware
@Markasoftware 是吗?那么,如何防止这种情况呢?有什么办法吗? - Mallikarjun
1个回答

0

Chrome使用默认的Android对话框来显示与警报、提示、确认方法相应的UI。

Dialog类有一个名为setCanceledOnTouchOutside的方法,用于管理标志。当标志为true时,点击对话框外部意味着用户取消对话框(类似于在桌面浏览器中按ESC键)。

在旧版本的Android中,默认情况下该标志为false。在较新的版本(ICS+根据此http://tofu0913.blogspot.ro/2012/09/android-dialog-setcanceledontouchoutside.html),该标志默认为true。

如果您想获得您尝试的内容,您可能可以使用覆盖层和一些HTML来模拟警报。

对于想要进一步测试的人:http://jsfiddle.net/s7TWH/(我已经测试了2.3 - 标志为false和4.4 - 标志为true):

$('#bombImg').on('touchstart',function(touchEvent) {
    window.alert("Bomb defused");
    touchEvent.preventDefault();    
});

非常有用,但我正在使用JS和HTML开发phonegap应用程序,那么我怎么在Java类中使用Dialog.setCanceledOnTouchOutside(false)呢?我们可以在Javascript中使用它吗? - Mallikarjun
我也使用过PhoneGap,是个不错的工具。我的回答解释了为什么在不同的Android版本上alert表现不同,这取决于Chrome/OS。你所能做的就是测试Cordova的通知http://docs.phonegap.com/en/2.1.0/cordova_notification_notification.md.html#notification.alert是否适用于你,或者实现我之前提到的基于HTML的覆盖层。 - Andrei B
基于HTML的覆盖层意味着弹出窗口和其他类似框架的东西吗?请检查我的编辑后的问题。 - Mallikarjun
是的,先生,谢谢您。但是在Android警告框中可能存在错误。 - Mallikarjun
是的,它不应该在所有版本的安卓系统中关闭,但只有在较高版本中才会关闭。尝试了所有可能性,但没有运气。 - Mallikarjun
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接