javascript 在离开页面前询问用户确认的最佳方式[关闭]

beq87vna  于 2023-04-10  发布在  Java
关注(0)|答案(8)|浏览(194)

就目前而言,这个问题不适合我们的问答形式。我们希望答案能得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或深入讨论。如果您认为这个问题可以改进并可能重新开放,请visit the help center寻求指导。
11年前关闭。
我目前正在构建一个注册页面,如果用户离开,我想弹出一个CSS框,询问他是否确定。我可以使用确认框完成这一壮举,但客户端说它们太难看了。我尝试使用unloadbeforeunload,但两者都不能阻止页面被重定向。使用这些事件,我返回false,所以除了返回false还有别的方法可以取消吗
另一个解决方案是将他们重定向到另一个有我弹出窗口的页面,但问题是,如果他们确实想离开这个页面,而且这不是一个错误,他们就会失去他们最初试图转到的页面。
最后一个解决方案是真实的弹出窗口。我唯一不喜欢的是,主窗口将有他们的目标页面,而弹出将有我的页面。在我看来,它看起来不相交。最重要的是,我担心弹出窗口拦截器。
只是想补充一下大家的意见。我明白阻止用户退出页面是令人恼火的,在我看来不应该这样做。现在我在这一点上使用确认框。发生的事情是,它实际上并没有“阻止”用户离开,客户端实际上想要做的是在用户对注册有疑问的情况下提出建议。如果用户在注册过程进行到一半时由于某种原因离开,客户端想要向用户提供研讨会的免费优惠券(该客户正在销售研讨会)以希望说服用户注册。客户的印象是,由于用户已经在表单上,他正在考虑注册,因此,也许他正在注册的研讨会将是让用户注册的最后推动。理想情况下,我不必阻止用户离开,这将是一样好的,在我看来,更好的是如果我可以暂停卸载过程。也许一个睡眠命令?我不我们真的不必让用户留在页面上,因为无论哪种方式,他们都会离开去到另一个页面。
此外,正如人们所说,这是一个可怕的标题,所以如果有人知道一个更好的,我真的很感激,如果他们能改变标题的东西没有那么垃圾邮件邀请。

w6mmgewl

w6mmgewl1#

当我看到“阻止用户”这几个字时,我开始痛苦地哀号。***永远不要阻止用户,只帮助他们。
如果他们看到你的注册页面就跑了,那是他们的选择。如果他们已经填写了一些数据,弹出一个JavaScript确认框(因为他们可能会不小心导航走),但不要这样做。如果他们没有接触表单,不要打扰他们-他们不想填写你的表单。
看看其他吸引用户的方法。如果你的表单很大,很吓人,把它分成简单的可管理的块,或者更好的是,把事情简化到用户只在你需要的时候给你数据。例如,你可能不需要他们的地址,直到你想向他们发布一些东西。
通过将其分解为多个部分,您可以用一个简单的表单吸引他们,一旦他们投入了时间,他们将更有可能继续这个过程。

但不要骚扰用户,如果用户不想注册,用弹出窗口和jaavscript对话框纠缠他们只会把他们彻底赶出网站。

考虑到这一点,假设你只是想阻止人们填写一半的表格,有几个选择可以真正帮助人们:
1.检测表单是否已更改,并询问他们一个简单的confirm()消息。
这就是你所能做的。一个CSS“弹出窗口”不会工作,因为你不能在unload事件中控制 * 窗口的位置。

  • 你可以 * 在所有页面的链接上放置一个事件监听器来触发一些东西来检查表单,但这只在用户点击其中一个链接时有用。如果用户点击后退或关闭窗口,它就不会有帮助。你可以 * 同时使用CSS和JavaScript,但你最终会有点混乱。

1.保持窗体在幕后的状态。

1的扩展。与其与用户争吵,让他们去他们想去的地方,但将表单的内容保存到session或cookie(如果合适的话),并在页面上放置一些东西(如SO在页面顶部的橙子提示栏),提醒他们已经开始填写表单,并给他们一个返回表单的链接。

当他们点击该链接时,您将数据从cookie(或会话)中加载回表单中,并让他们继续进行。这有一个明显的好处,让他们在您的网站上做他们喜欢的事情,并保持数据安全。
如果他们没有回来,他们的cookie/会话过期了,那是他们的错。你只能把马带到水边,强迫它喝水不是你的工作。

bxfogqkk

bxfogqkk2#

别这么做
但是如果你愿意的话,试试这个。记录鼠标的位置并检测一个快速向上的推力--用户正在伸手去拿大X或者左上角或右上角。现在可能是你在屏幕上找到一个不显眼的盒子的机会。
我在网上看到过这个工具,它很邪恶。

sc4hvdpw

sc4hvdpw3#

如果你想捕获链接,你可以重写页面中的链接,转到一个“你真的想离开吗?”的javascript函数,传递目的地URL作为参数。
如果你想阻止用户使用他们的“后退”按钮,或者阻止他们在地址栏中放置另一个URL,**停止。**立即停止。(1)浏览器的设计就是为了防止这种令人讨厌的行为,(2)即使他们允许这种行为,也要看到(1)的最后两个字。这太粗鲁了。你的网站并没有那么特别,不管你认为它有多酷。

uplii1fm

uplii1fm4#

window.onbeforeunload = function() { return "Message"; };

使用这样的JavaScript来显示一条 * 离开确认 * 消息。

a5g8bdjr

a5g8bdjr5#

以下是我能想到的几种方法,但它们并非没有缺陷:

Whatcha Gonna Do技术检测鼠标位置向浏览器边缘移动,因为用户可能会关闭标签页,窗口,返回,导航到其他地方。如果是这样,立即提示他们这可能是一个错误,他们将失去一些非常有价值的东西。然而,这里的问题是,你不知道他们的意图是什么,你可能会激怒他们与弹出。此外,他们可能会使用一堆快捷键,如Ctrl+W等来做同样的事情。
You've Got Mail技巧如果你在用户关闭页面之前成功获取了用户的电子邮件地址,那么你就中了头奖。只要用户在电子邮件框中输入任何内容,然后离开它,立即使用 AJAX 将其发送到服务器。将页面的状态保存到localStorage或使用cookie或其他东西保存在服务器上,以便稍后可以重新创建。每隔几个小时给他们发一封电子邮件,给他们一个直接链接到以前保存的表格,也许这次有特别优惠。
History Repeats Itself technique然后是臭名昭著的历史操作,您不断将当前页面堆叠到文档历史中,因此后退按钮实际上变得毫无价值。
Don't Put All Your Eggs In One Basket技巧我想到的另一个技巧是在注册表单的后台创建多个窗口,当任何一个窗口中的任何一个字段发生变化时,这些窗口都保持同步。这是一个经典的技巧,真正将“不要把所有鸡蛋放在一个篮子里”这句话应用到了现实生活中。

这种技术的另一个优点是,即使用户关闭了其中一个窗口,后来又遇到了一个相同的克隆窗口,其中所有的字段都是最新填充的,他们可能会感到困惑,并认为他们从未关闭过页面。这一次他们可能会直接填写登记表。但你必须小心,因为任何超过2或3个克隆将使它明显的是怎么回事。

你是赢家技巧另一个技巧是告诉每一个用户他们是网站上的第X位访问者,并使用一个合适的整数作为X,例如1000,10000,50000等。告诉他们,一旦他们在网站上注册,他们就可以领取奖品。想象一下,当他们登陆你的网站时,每个用户都有多么特别的感觉。奖品不一定是有形的东西,它可以简单地是你在intertubes上找到的免费优惠券。
Where Do You Want To Go Today?technique1这基本上是剽窃您的答案。在onbeforeunload回调中使用document.location.href = 'some url',在卸载之前导航到不同的页面。

1 Firefox

  • 注意:* 这里没有银解决方案,除非你用自己的安全策略编写自己的浏览器,但这些都是你可以做的优化,使用户完全不可能离开。
qeeaahzv

qeeaahzv6#

不是所有的浏览器都支持模态弹出,没有它你的页面仍然会继续导航。
这是真实的个非常糟糕的需求。这种需求在桌面应用程序中是合理的,但在网站中却是完全不合理的。想象一下无法离开网站。
答案是要么使用可怕的确认框并将其压缩。或者不要要求用户在每页输入太多数据。使用一步一步的向导式数据输入,由于意外导航而造成的损失最小化。

flvtvl50

flvtvl507#

您可以使用document.location.href = "www.website.com"更改url的值

ffx8fchx

ffx8fchx8#

我可以使用确认框来完成这个任务,但是客户说它们太丑了。
如果问题是标准JS弹出框的丑陋,请尝试以下操作:http://www.sohtanaka.com/web-design/inline-modal-window-w-css-and-jquery/
除此之外,我同意大多数人说的话:如果你不想失去用户的话,请非常小心地做这件事。

相关问题