问题标签 [onunload]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1889 浏览

jquery - 如何从 Chrome 的 window.onunload 进行 ajax 同步调用?

我正在尝试对 window.onunload 进行 jquery .ajax 同步调用。FF 和 IE 可以工作,但不能在 Chrome 上工作。我做了一些测试,Chrome 似乎终止了窗口而不是等待响应。

这是我的代码:

请注意,我使用 window.onbeforeunload 来显示警告消息,然后在用户离开页面时触发 window.unload。

0 投票
4 回答
6307 浏览

javascript - 检测不支持 onunload/onbeforeunload 的浏览器

在所有浏览器中,似乎只有 Opera 不支持 onunload/onbeforeunload 事件。(现在已经十五年了,Opera!)这个问题的解决方案已经被介绍过很多次了,例如:onbeforeunload support detection

不幸的是,从 Opera 11.51 开始,("onbeforeunload" in window) == true实际的 onbeforeunload 事件从未执行!

当用户离开页面时,我的 Web 应用程序需要向服务器发送数据;我正在为此使用同步 ajax 请求。看来我不得不求助于在页面某处使用“保存”按钮来掩盖 Opera 问题。但是,我不希望这个按钮让浏览器能够通过 ajax 自动保存的用户感到困惑,所以我真的希望这个按钮只出现在 Opera 中。

我唯一的选择是浏览器检测吗?问题是,无论如何,Opera 都可以选择将自己伪装成其他浏览器。

0 投票
3 回答
625 浏览

javascript - 在编辑时实现锁定和解锁文档

情况如下:

我有一个基于 Web 的票务应用程序,有多个用户。

可能发生的一个问题(并且确实发生在我要替换的旧版本中)是 user1 打开一张票,编辑它,然后保存它。但是在他编辑它的同时,user2 也打开并保存了勾选。user2 所做的更改将被 user1 丢失/覆盖。

为了防止这种情况,我实现了一个锁定机制,它相当简单:

  1. 在打开票证时,PHP 脚本会检查现有的锁。
  2. 如果没有找到,它会锁定并打开文档。
  3. 在 JS 中,setTimeout()一个 XmlHttpRequest 调用会在 10 分钟后解锁票证(工作无问题)。
  4. 我还设置了一个unload事件以在关闭/离开窗口/选项卡时解锁票

问题出在第 4 步:unload事件(& 它的朋友beforeunload)工作得不够好,无法可靠地实现这一点(要使这个特性有任何严肃的意义,它必须是可靠的),许多浏览器并不总是触发它当我希望它被解雇时(比如按下后退按钮、按 F5、关闭选项卡等。这因浏览器而异)

我能想出的唯一选择是使用setTimeout()XmlHttpRequest()调用 php 脚本来告诉它页面仍然打开。如果这个“心跳”监视器失败,我们假设用户离开票证并解锁文档。

这对我来说似乎非常低效,并且很快就会导致对服务器的许多请求,甚至只有几个用户。

有人对如何处理这个问题有更好的想法吗?

它需要在 IE8+ 和其他现代浏览器(理想情况下,Firefox、Webkit、Opera)中工作。我不关心 IE6/IE7,我们的组织不使用这些)。

0 投票
6 回答
28929 浏览

javascript - 如何防止window.onbeforeunload被javascript触发:IE中的href链接?

我正在为我的表单构建一个故障保险,它将警告用户如果他们离开页面,他们的表单数据将丢失(类似于 gmail 所做的)。

上面的函数在 Firefox 中效果很好,但在 IE 中它是由任何 href 链接触发的,即使是指向 javascript 而不是其他页面的链接。

例如....

我想知道是否有任何方法可以解决这个问题,因为我不希望用户认为当他们只是点击一个按钮时他们正在离开页面。我没有重写所有各种链接的选项,因为它们是内置的并且数量众多。

有任何想法吗?

0 投票
1 回答
2623 浏览

google-chrome - onunload Ajax 函数在 Chrome 中不起作用

我正在开发一个应用程序,该应用程序需要在用户离开页面时将更新的数据存储在数据库中。为此,我将 Ajax 函数绑定到页面的“onunload”事件。这适用于除 Chrome 之外的所有浏览器。我也尝试过“onbeforeunload”,但结果是一样的。

我怀疑这与 Chrome 对它的安全性过于狂热有关。在尝试测试事件时,我发现它阻止了我输入的警报,以查看函数是否被调用,并且还收到错误“Usafe JavaScript 尝试使用 URL 访问框架......域、协议和端口必须匹配”。回发将转到同一域内的页面。

任何人都可以对此有所了解或可能为我提供解决方法吗?

0 投票
7 回答
140366 浏览

javascript - window.onunload 在 Chrome 浏览器中无法正常工作。谁能帮我?

我写了这段代码

此代码在 IE 和 Firefox 中运行良好。但是这段代码在 Chrome 中不起作用。这两个陈述alert("Unload Window");MyMethod();不起作用。

0 投票
2 回答
2190 浏览

javascript - 如何停止使用标准化 JavaScript 卸载页面(不是`onbeforeunload`)

在您重新链接我之前,我已经阅读了诸如如何阻止页面在 JS 中卸载(导航)之类的问题?,但它们处理 HTML4 及以下版本。我想要一个利用 HTML5 事件属性的答案onunload。我还希望它尽可能纯粹,即没有外部库或插件,如 jQuery 或 Flash,只使用标准化代码(HTML、CSS 和 JavaScript,不依赖于平台)。

在你告诉我使用之前onbeforeunload,请注意它是NON-STANDARD,因此不符合我上面描述的标准。它不适用于所有浏览器,尤其是那些在 IE 实现它之前制作的浏览器。

问题


在我的网站上,我有几个音乐播放器,如果其中任何一个在用户尝试离开页面时正在播放,我想弹出一个对话框,确保他们有意这样做并且他们明白这将停止音频流,如果他们选择“是”或“确定”,则继续导航,但如果他们单击“否”或“取消”,它会停留在同一页面上并不间断地播放音频。如何使用 JavaScript 取消页面卸载而不使用ONBEFOREUNLOAD

到目前为止的代码


到目前为止,我有以下代码,但不知道如何停止卸载:

工作示例

0 投票
2 回答
386 浏览

javascript - 设置一个 Javascript 变量,以便它可以通过 onunload 函数进行检查

我有一个页面显示传入的库存零件,因此可以输入序列号。我有一个 JQuery Ajax 函数,它更新数据库并隐藏输入序列号的行 ID。这里没有问题。

我还在卸载时发送了一封电子邮件,再次没有问题。

我想要做的是在我的ajax函数之后将一个变量设置为1,这样我就可以看到库存有一个修改,然后在onload函数中我可以看到该变量的状态并决定是否发送电子邮件。

我设置的序列号是:

onunload的很简单:

0 投票
0 回答
216 浏览

onunload - 区分使用 window.close 和其他方式关闭窗口(如单击十字)

我想知道窗口是使用window.close()还是手动关闭的(比如单击十字或刷新,或 Alt + F4)。为此,我可以检查是否调用了 unload 事件,因为当我检查 Chrome 时,在执行window.close()时未调用 unload 事件

我想知道这是指定的行为,还是因浏览器而异

0 投票
1 回答
581 浏览

javascript - 用户不友好 onbeforeunload / onunload

我正在为 onbeforeunload、onunload 和在正确的时间生成正确的消息而苦苦挣扎。欢迎任何想法。这是这种情况:

  • 当我使用 onbeforeunload 时,用户会收到一条消息以选择是否离开,但我无法将其关闭 - 该消息是标准的,并且无论事件处理程序中有什么都会出现。
  • 当我使用 onunload 时,我可以控制出现的“再见”消息,但我不能为用户提供改变主意的机会。

例如,如果有数据要保存。使用 onbeforeunload,会弹出一条消息,无论用户数据的状态如何,询问他们是否要导航离开。使用onunload,我可以在询问用户之前选择消息并检查是否有未保存的数据,如果他们已经保存,可以省去他们的麻烦,但我的用户不能选择留在页面上。

我在那里错过了什么吗?似乎我无法获得我想要的简单行为 - 检查应用程序状态,发送消息,并让用户在他们离开之前采取行动。或者是否使用其中一个或两个事件来获得这种行为?