所以,建立一个工作的门户网站。如果用户离开页面,Boss希望我将用户注销。找到了这个教程:http://kbeezie.com/cross-browser-exit-pop/
我使用了jquery示例并将其插入到几页中以进行测试。我正在使用asp.net/C#进行开发。这是页面的基本布局,包括我的脚本:
<%@ Page ... %>
<asp:Content .. > </asp:Content>
<asp:Content .. >
//my navigate away function
<script type="text/javascript">
function PopIt() {
return "Are you sure you want to leave?";
}
$(document).ready(function () {
window.onbeforeunload = PopIt;
$("a").click(function () { window.onbeforeunload = null; });
});
</script>
<div>
<table></table>
//other stuff
</div>
</asp:Content>
当我点击我们门户网站上的链接时,导航离开脚本有效,它不会弹出,因为我们点击了一个内部链接。但是,如果我继续在网站上浏览,最后点击2或3次点击内部链接,它会问我是否确定要离开。谁能告诉我为什么会这样?
编辑:我们在每个页面都引用了jquery,所以这不是问题。
编辑:这是一个有效的JSFiddle。当你点击链接时没有任何反应,但当你离开时它会提示。
答案 0 :(得分:1)
由于生成了某些链接,因此当您分配覆盖onbeforeunload
处理程序的事件处理程序时,它们将不会出现在页面上。试试这个......
<script type="text/javascript">
function PopIt() {
return "Are you sure you want to leave?";
}
$(document).ready(function () {
window.onbeforeunload = PopIt;
$("document").on("click", "a", function () {
window.onbeforeunload = null;
});
});
</script>
它将捕获所有链接点击,无论链接是否在脚本运行时都在页面上。
答案 1 :(得分:0)
所以经过一周左右的尝试,我放弃了。几天后,我的一位同事向我提到,我们继承的一个基类有一个运行OnPreInit
的脚本拦截器函数。
我一直怀疑在我们的大型代码库中的某个地方覆盖了我的OnBeforeUnload
功能,但当我搜索OnBeforeUnload
的用途时,我什么都没发现。事实证明,我从来没有找到脚本拦截器,因为有人认为将它命名为一些不起眼的东西是个好主意!
重写脚本拦截器后,原始代码有效。