javascript - http 当用户关闭浏览器时放置

标签 javascript angularjs http

我试图在用户关闭浏览器时发出一个放置请求来保存一些内容。 我正在使用 Angular,并且尝试使用 onbeforeunload 和 onunload 事件,但没有让它按照我想要的方式工作。我有一个资源想要更新。

    $window.onbeforeunload = function(){
       myResource.foo = closingBrowser();
       myResource.$update();}

随着 fiddler 运行,我发现这不会执行放置请求。当我使用 $window.onunload 时也不会。但是,如果我在 onbeforeunload 输入 return 语句,则会弹出确认框,当我单击“确定”时,fiddler 显示 put 请求已完成。现在我不想要这个弹出窗口,我只想在用户关闭浏览器时 PUT 。

我有办法用这些方法来做到这一点,还是必须以其他方式解决它(非常感谢建议)?

更新:

我做了一些更多的测试,发现了一些不一致的行为。在 Internet Explorer (11) 中:如果我有 return 语句,就会出现经典的弹出窗口。但如果我按取消并返回页面,它只会发送 PUT。如果我按 OK 离开,则不会发出 PUT。

在 chrome 中:无论我按“取消”返回,还是按“确定”离开,PUT 仍然会发送。另一个在 chrome 中有效但在 ie 中无效的“hack”(?),当没有返回时(没有弹出窗口,这是想要的行为),是在 $update() 之后有一个循环,就像: while(!myResource.$resolved){} (或者只是迭代几百万次的 for 循环也有效,但它看起来更难看,)chrome 实际上发送了 PUT (IE 没有) .

您认为这会如何在 IE 中复制?

我没有在 Firefox 上进行广泛的测试,但我做了一点点,它看起来更像 Chrome。

最佳答案

你无法逃脱这个弹出窗口(“你想关闭这个窗口bla bla bla ...”)。 我认为最好的解决方案是:

  1. 如果用户关闭当前选项卡,浏览器将显示带有您的文本的弹出窗口
  2. 您向服务器发送http put请求,当http请求将调用成功回调时,您将显示自定义弹出窗口(“您的设置或其他内容已保存bla bla bla)
  3. 使用 window.close 关闭窗口

关于javascript - http 当用户关闭浏览器时放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21695982/

相关文章:

javascript - 如何将 $.ajax 对象传递给另一个函数?

javascript - 使用 YouTube onStateChange 调用 AnythingSlider stopSlider();播放视频时

javascript - 为什么当我们将 Math.floor 写入 HTML angular 时,Math.floor 什么都不返回?

python - 如何使用 Python 获取请求中响应的原始内容?

javascript - 适用于 Safari 的 AMP 表单验证

Javascript 对象数组和唯一值

javascript - 使用 django 和 angularjs 渲染 html 模板时出现 TemplateSyntaxError

javascript - 如何将选中的项目添加到与未选中的项目不同的数组中? Angular js

angular - 在 Angular 项目中将 Http 迁移到 HttpClient

apache - 代理是否必须先完全加载所有内容才能将它们发回?