我正在使用一些jQuery函数,例如:
$(window).one('beforeunload', function() {
//my code
});
但我真的想找出是什么触发了这个事件以及如何触发。
我尝试了以下代码:
$(window).one('beforeunload', function(e) {
alert(JSON.stringify(e));
});
但它会引发有关循环结构的异常。肯定还有其他区分和调试的方法。
我将如何应用它?
我想看看是什么触发了这个事件,是链接、提交的表单、Javascript、页面刷新、前进和后退按钮还是其他任何东西,在这种情况下都可以。但是,如果是通过调用打开外部应用程序触发的,我想放弃此事件并返回 null。
外部应用程序启动示例:
<a href="skype:your_skype_name?call" >
有什么想法吗?
已解决
这是我解决的方法。
我先创建了一些脚本链接,以便更好地控制事件:
<a href="javascript:void(0)" id="skype_click_ok"
接下来我创建一个全局变量来存储beforeunload的状态:
var dontunload=0;
然后我手动处理链接,通过设置location.href和更改变量状态:
$('#skype_click_ok').click(function(){
dontunload=1;
location.href='skype:marilynbrusas?call';
});
现在是我的实际beforeunload事件,注意one()
也已经改为bind()
:
$(window).bind('beforeunload', function() {
if (dontunload==1) dontunload=0; //if triggered from our skype - do nothing, yet cancel state for the next call
else { //Do the actual code
// Fade out, before leaving the page.
$('html#my_html').stop(true,false).css('overflow','hidden').animate({opacity:0},2000);
// Lock content with invalid image hack
$('body#my_body').prepend(
$('<div>').attr({style:'position:fixed;height:100%;width:100%;left:0;top:0;z-index:900100;background-image:url(in-your-face)'})
);
// unbind the event
$(this).unbind('beforeunload');
}
});
编辑3
事实上,这个问题还没有得到解决。这个技巧无法在IE浏览器中使用,同时也不能触发来自javascript:void(0)链接的事件...
<a href="skype:your_skype_name?call" >
- 这会触发 GET 请求,从而触发 before-unload 事件。外部应用程序意味着它具有内部协议,而不是http:
,例如skype:
。因此,它尝试启动 Skype 应用程序而不是在 Web 上打开某个页面。如果是这种情况,我确实想要取消我的事件。 - Anonymous