就目前而言,这个问题不适合我们的问答形式。我们希望答案能得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或深入讨论。如果您认为这个问题可以改进并可能重新开放,请visit the help center寻求指导。
11年前关闭。
我目前正在构建一个注册页面,如果用户离开,我想弹出一个CSS框,询问他是否确定。我可以使用确认框完成这一壮举,但客户端说它们太难看了。我尝试使用unload
和beforeunload
,但两者都不能阻止页面被重定向。使用这些事件,我返回false,所以除了返回false还有别的方法可以取消吗
另一个解决方案是将他们重定向到另一个有我弹出窗口的页面,但问题是,如果他们确实想离开这个页面,而且这不是一个错误,他们就会失去他们最初试图转到的页面。
最后一个解决方案是真实的弹出窗口。我唯一不喜欢的是,主窗口将有他们的目标页面,而弹出将有我的页面。在我看来,它看起来不相交。最重要的是,我担心弹出窗口拦截器。
只是想补充一下大家的意见。我明白阻止用户退出页面是令人恼火的,在我看来不应该这样做。现在我在这一点上使用确认框。发生的事情是,它实际上并没有“阻止”用户离开,客户端实际上想要做的是在用户对注册有疑问的情况下提出建议。如果用户在注册过程进行到一半时由于某种原因离开,客户端想要向用户提供研讨会的免费优惠券(该客户正在销售研讨会)以希望说服用户注册。客户的印象是,由于用户已经在表单上,他正在考虑注册,因此,也许他正在注册的研讨会将是让用户注册的最后推动。理想情况下,我不必阻止用户离开,这将是一样好的,在我看来,更好的是如果我可以暂停卸载过程。也许一个睡眠命令?我不我们真的不必让用户留在页面上,因为无论哪种方式,他们都会离开去到另一个页面。
此外,正如人们所说,这是一个可怕的标题,所以如果有人知道一个更好的,我真的很感激,如果他们能改变标题的东西没有那么垃圾邮件邀请。
8条答案
按热度按时间w6mmgewl1#
当我看到“阻止用户”这几个字时,我开始痛苦地哀号。***永远不要阻止用户,只帮助他们。
如果他们看到你的注册页面就跑了,那是他们的选择。如果他们已经填写了一些数据,弹出一个JavaScript确认框(因为他们可能会不小心导航走),但不要这样做。如果他们没有接触表单,不要打扰他们-他们不想填写你的表单。
看看其他吸引用户的方法。如果你的表单很大,很吓人,把它分成简单的可管理的块,或者更好的是,把事情简化到用户只在你需要的时候给你数据。例如,你可能不需要他们的地址,直到你想向他们发布一些东西。
通过将其分解为多个部分,您可以用一个简单的表单吸引他们,一旦他们投入了时间,他们将更有可能继续这个过程。
但不要骚扰用户,如果用户不想注册,用弹出窗口和jaavscript对话框纠缠他们只会把他们彻底赶出网站。
考虑到这一点,假设你只是想阻止人们填写一半的表格,有几个选择可以真正帮助人们:
1.检测表单是否已更改,并询问他们一个简单的
confirm()
消息。这就是你所能做的。一个CSS“弹出窗口”不会工作,因为你不能在unload事件中控制 * 窗口的位置。
1.保持窗体在幕后的状态。
1的扩展。与其与用户争吵,让他们去他们想去的地方,但将表单的内容保存到session或cookie(如果合适的话),并在页面上放置一些东西(如SO在页面顶部的橙子提示栏),提醒他们已经开始填写表单,并给他们一个返回表单的链接。
当他们点击该链接时,您将数据从cookie(或会话)中加载回表单中,并让他们继续进行。这有一个明显的好处,让他们在您的网站上做他们喜欢的事情,并保持数据安全。
如果他们没有回来,他们的cookie/会话过期了,那是他们的错。你只能把马带到水边,强迫它喝水不是你的工作。
bxfogqkk2#
别这么做
但是如果你愿意的话,试试这个。记录鼠标的位置并检测一个快速向上的推力--用户正在伸手去拿大X或者左上角或右上角。现在可能是你在屏幕上找到一个不显眼的盒子的机会。
我在网上看到过这个工具,它很邪恶。
sc4hvdpw3#
如果你想捕获链接,你可以重写页面中的链接,转到一个“你真的想离开吗?”的javascript函数,传递目的地URL作为参数。
如果你想阻止用户使用他们的“后退”按钮,或者阻止他们在地址栏中放置另一个URL,**停止。**立即停止。(1)浏览器的设计就是为了防止这种令人讨厌的行为,(2)即使他们允许这种行为,也要看到(1)的最后两个字。这太粗鲁了。你的网站并没有那么特别,不管你认为它有多酷。
uplii1fm4#
使用这样的JavaScript来显示一条 * 离开确认 * 消息。
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
qeeaahzv6#
不是所有的浏览器都支持模态弹出,没有它你的页面仍然会继续导航。
这是真实的个非常糟糕的需求。这种需求在桌面应用程序中是合理的,但在网站中却是完全不合理的。想象一下无法离开网站。
答案是要么使用可怕的确认框并将其压缩。或者不要要求用户在每页输入太多数据。使用一步一步的向导式数据输入,由于意外导航而造成的损失最小化。
flvtvl507#
您可以使用
document.location.href = "www.website.com"
更改url的值ffx8fchx8#
我可以使用确认框来完成这个任务,但是客户说它们太丑了。
如果问题是标准JS弹出框的丑陋,请尝试以下操作:http://www.sohtanaka.com/web-design/inline-modal-window-w-css-and-jquery/
除此之外,我同意大多数人说的话:如果你不想失去用户的话,请非常小心地做这件事。