一个客户端在Google Chrome中遇到了一个非常奇怪的错误。她刚打电话给我,事情又发生了第二次。
在CRM的报价页上,如果报价尚未保存,我会在onbeforenload上返回一个字符串。该对话框只是警告用户确保他/她在离开页面之前保存了报价。
这是两周内第二次对话陷入困境。单击"停留在此页面"或"离开此页面",两个按钮都会立即再次显示相同的对话框。由于对话框位于浏览器的顶部,甚至不可能将浏览器(或选项卡)作为一个整体关闭。唯一的解决方案:任务管理器。
在办公室里,我们使用相同的CRM(并且已经使用了好几个月),没有任何问题。我是在看谷歌Chrome漏洞还是谷歌Chrome安装错误?
$(function() {
$(window).on('beforeunload', function() {
if (quoteIsDirty) {
return 'Warning - You have made changes to the quote, but have not saved your changes yet. Are you sure you want to close this page?';
}
});
});
如果看不到实际的代码,就很难判断。但这里有一些想法:
- 触发
beforeunload
的多个或不同事件,如window.close
和window.location = ...
- 具有指数回退或与脏状态不一致的类似机制的持久性函数
- 比赛条件
这当然可能是Chrome的错误,但我已经学会了不愿意责怪Chrome,因为它几乎总是我的应用程序的问题。:)