我已经阅读并搜索了这些并找到了变体(例如,点击时),但没有找到有效的浏览器重新加载/刷新。
基本上,我想要的是当用户在浏览器中重新加载,刷新或F5而不是常规警报确认时,会弹出sweetalert对话框,询问用户是否要刷新,丢失他们查看的任何信息,单击确定/取消。
在我的控制器中,我有这个:
$scope.$on('$destroy', function() {
window.onbeforeunload = undefined;
});
window.onbeforeunload = function (e) {
e.preventDefault();
SweetAlert.swal({
title: "I display correctly but....",
text: "before page refreshes and do not wait for user to click ok",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",confirmButtonText: "Ok",
cancelButtonText: "Cancel",
closeOnConfirm: true,
closeOnCancel: true },
function(isConfirm){
if (isConfirm) {
console.log('do something...')
}
});
return undefined;
};
$scope.$on('$locationChangeStart', function( event, toState, toParams, fromState, fromParams) {
SweetAlert.swal({
title: "I display and wait for the user to click but too late",
text: "...after the page refreshes",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",confirmButtonText: "Ok",
cancelButtonText: "Cancel",
closeOnConfirm: true,
closeOnCancel: true },
function(isConfirm){
if (isConfirm) {
console.log('do something...')
}
});
});
" window.onbeforeunload"部分在正确的时间加载(在页面重新加载/刷新之前),但不等待用户选择。
" $ scope。$ on(' $ locationChangeStart',..."部分加载太晚(页面重新加载/刷新后)但是等待用户选择。
除了' $ locationChangeStart,'我还试过了“stateChangeStart'和' $ routeChangeStart'无济于事。
我缺少什么让这项工作?任何帮助或方向将不胜感激。
答案 0 :(得分:0)
您不应该覆盖原生函数,例如alert()
或confirm()
,因为它们是阻塞的,并且它们是有充分理由阻止的。
但如果你真的想这样做,就有可能像这样
/**
* Definition of global attached to window properties <br/>
*/
(function() {
nalert = window.alert;
Type = {
native: 'native',
custom: 'custom'
};
})();
/**
* Factory method for calling alert().
* It will be call a native alert() or a custom redefined alert() by a Type param.
* This defeinition need for IE
*/
(function(proxy) {
proxy.alert = function () {
var message = (!arguments[0]) ? 'null': arguments[0];
var type = (!arguments[1]) ? '': arguments[1];
if(type && type == 'native') {
nalert(message);
}
else {
// TODO: Call to SweetAlert()
document.write('<h1>I am redefiend alert()<br/>Alert say: '+message+'</h1>');
}
};
})(this);