在我们的Web应用程序中,我们使用在beforeunload事件中触发的ajax调用来跟踪用户是否仍在处理某些信息。大致如下所示:$(window).on('beforeunload', function() { $.ajax({ async: false, url: "../orderInformation/assignOrder", data: { orderId: orderId, shouldAssign: false } }); console.info("Handled beforeunload");});直到今天,这在Chrome,IE和Firefox中都运行良好。从Chrome 73.0.3683.103版开始,不再执行Ajax调用,尽管该处理程序中的其余JS均会执行。即消息被打印到控制台。Chrome的开发人员工具栏上没有显示正在版本73.0.3683.103中执行的AJAX调用,并且我已经确认我们的网络服务器也未收到请求。但是,当我在Chrome 73.0.3683.86上运行相同的代码时,它将触发Ajax请求,并且Web服务器会收到它!我确认此更改会影响Mac OS和Windows。Chrome 73.0.3683.103中的哪些更改导致了此问题?和/或如何解决?来自客户的一系列支持通知书引起了我们的注意,因为这对我们的应用程序的工作方式产生了负面影响。在我11年的职业生涯中,作为Web应用程序开发人员,这是我第一次告诉我们的用户切换到Internet Explorer。
2 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
我也遇到了这个。我发现一条推文说,同步Xhr的支持已从Blink(Chrome使用的浏览器引擎)中的页面关闭事件中删除。这发生在四月初。Chrome 73.0.3683.103很可能在已删除该链接的Blink版本上运行。sendBeacon和fetch keepalive是在pageunload上触发ajax的新推荐方法。
慕后森
TA贡献1802条经验 获得超5个赞
我的使用信标的解决方法-异步调用
不是答案,而是解决方案:我使用问题注释中提供的提示来提出以下解决方案。我在现有代码之上添加了此代码,因此现有代码是后备代码。请注意,使用信标将触发异步调用。
if (navigator && navigator.sendBeacon) {
navigator.sendBeacon(url);
return;
}
Ildar Faizov提到的解决方法-同步呼叫
我没有对此进行测试,但是据报道这可以工作并执行同步ajax调用。
var img = document.createElement('img');
img.src = url;
document.body.appendChild(img);
添加回答
举报
0/150
提交
取消