使javascript警报/确认对话框更加可见(尤其是在Google Chrome浏览器中)

使javascript警报/确认对话框更加可见(尤其是在Google Chrome浏览器中),javascript,jquery,google-chrome,alert,Javascript,Jquery,Google Chrome,Alert,在Google Chrome浏览器的最新版本中,javascript警报对话框和确认对话框不是很明显。它们在出现时不会发出声音,它们位于屏幕顶部附近,并且是白色的,因此它们很容易与大多数网站融合 这会导致用户没有意识到警报存在,并且由于警报会冻结浏览器直到解除,用户很容易认为他们的浏览器已冻结 有哪些方法可以让javascript警报更加突出?一个选项是使用div覆盖创建自己的警报。但是,对确认对话框执行此操作将更加困难,因为您通常希望在用户在确认对话框上选择“确定”或“取消”之前停止所有执行

在Google Chrome浏览器的最新版本中,javascript警报对话框和确认对话框不是很明显。它们在出现时不会发出声音,它们位于屏幕顶部附近,并且是白色的,因此它们很容易与大多数网站融合

这会导致用户没有意识到警报存在,并且由于警报会冻结浏览器直到解除,用户很容易认为他们的浏览器已冻结


有哪些方法可以让javascript警报更加突出?

一个选项是使用div覆盖创建自己的警报。但是,对确认对话框执行此操作将更加困难,因为您通常希望在用户在确认对话框上选择“确定”或“取消”之前停止所有执行

下面是一个很好的选项,允许您继续使用浏览器的“警报”和“确认”对话框:

创建这些函数(使用Jquery,但可以修改为Javascript):

然后,代替呼叫
警报('Hello World')
确认('Continue?')

而是调用
alrt('Hello World')
cnfrm('Continue?')

就这些。这将创建一个覆盖整个页面的临时着色覆盖层,并在其顶部显示“警报/确认”对话框,使对话框更加可见

见以下示例:

(虽然JSFIDLE使用了框架,这否定了部分效果,但您知道了它在整个网页上的功能。)

您也可以替代现有的功能,这样就不需要更改代码。要点很好,Archer。如果您想用此代码覆盖所有警报,您肯定可以这样做。我接管了一个旧项目,该项目到处都有
parseInt(n)
,没有基数值。我通过重写
parseInt
函数来修复这个问题,如果你没有通过一个函数,就假定为10,修复了这个过程中的很多问题。我非常喜欢覆盖,但不要走得太远。请不要考虑覆盖警报或确认。要覆盖,您需要使用
apply
,但IE8及以下版本不支持该功能。看来我的原始代码是正确的。不要使用警报。谷歌可能会让它们在Chrome浏览器中显得不那么突出,因为它们令人讨厌。有比提醒和确认更好的选择。最好看看你为什么使用它们,并以更好的方式整合错误和其他信息。我必须考虑到这一点。目前,我相信使用确认对话框是有充分理由的。例如,JSFIDLE上弹出了一个确认对话框,询问我是否真的想在不保存更改的情况下导航。showModalDialog()的行为类似于确认或警报,允许您显示整个自定义HTML文件而不是字符串。
function alrt(msg) {
    var tint = $('<div class="PopupBgTint"></div>');
    tint.appendTo('body');
    alert(msg);
    tint.remove();
}
function cnfrm(msg) {
    var tint = $('<div class="PopupBgTint"></div>');
    tint.appendTo('body');
    var rtrn = confirm(msg);
    tint.remove();
    return rtrn;
}
.PopupBgTint
{
    position: fixed;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
    background-color: black;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
    filter: alpha(opacity=50);
    -moz-opacity: 0.5;
    -khtml-opacity: 0.5;
    opacity: 0.5;
    z-index:99999;
}