当用户关闭浏览器时放入http

时间:2014-02-11 07:47:46

标签: javascript angularjs http

我正在尝试发出一个put请求,以便在用户关闭浏览器时保存一些内容。 我正在使用角度,我尝试使用onbeforeunload和onunload事件,但没有让它以我想要的方式工作。我有一个我想要更新的资源。

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

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

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

更新

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

在Chrome中:如果我按取消返回,或者确定离开,则仍然发送PUT无关紧要。另一个“hack”(?)在chrome中工作但不是,即没有返回(没有弹出窗口,这是想要的行为),是在$update()之后有一个循环,类似于:{{1} (或者只是for循环迭代几百万次也有效,但看起来更丑),chrome实际上发送了PUT(IE没有)。

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

我没有对firefox做过大量的测试,但是我做的很少,看起来更像是chrome。

1 个答案:

答案 0 :(得分:0)

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

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