你不能。只有特殊的内置程序才能做到这一点。有一段时间有showModalDialog https://developer.mozilla.org/en-US/docs/Web/API/Window/showModalDialog特殊的内置功能可让您为内容指定 URI,从而对其进行自定义,但它从未得到广泛支持,现在甚至被曾经支持它的浏览器也不推荐使用。
相反,使您当前的警报功能使用div
接受警报关闭时的回调(或返回关闭时已结算的承诺),以允许您继续处理。
例如,如果您的代码曾经使用alert
并像这样工作:
function foo() {
var x;
x = doSomething();
alert("Alert! Alert!");
doSomethingAfterTheAlertIsCleared(x);
doAnotherThingAfterward();
}
...你可以将其更改为:
function foo() {
var x;
x = doSomething();
fakeAlert("Alert! Alert!", function() {
doSomethingAfterTheAlertIsCleared(x);
doAnotherThingAfterward();
});
}
请注意,现在警报后面的所有代码都在一个函数中,我们将其引用传递到fakeAlert
. The foo
函数在假警报仍然显示时返回,但最终用户消除假警报并调用我们的回调。请注意,我们的回调代码可以访问调用中的局部变量foo
我们正在处理,因为我们的回调是一个闭包(不要担心这是一个相当新和/或神秘的术语,闭包并不复杂 http://blog.niftysnippets.org/2008/02/closures-are-not-complicated.html).
当然,如果警报后唯一的事情是不带任何参数的单个函数调用,我们可以直接传递该函数引用。例如,这个:
function foo() {
doSomething();
alert("Alert! Alert!");
doSomethingAfterTheAlertIsCleared();
}
becomes:
function foo() {
doSomething();
fakeAlert("Alert! Alert!", doSomethingAfterTheAlertIsCleared);
}
(请注意,没有()
after doSomethingAfterTheAlertIsCleared
- 是引用函数对象,不调用该函数;fakeAlert
会调用它。)
如果您不确定如何做fakeAlert
将调用回调,它将位于用户“关闭”警报 div 的事件处理程序内,并且您只需调用回调的参数,就像对函数的任何其他引用所做的那样。因此,如果fakeAlert
将其接收为callback
,你这样称呼它callback();
.