我在rails应用程序上有一个ruby,我想检测用户移动到不同的域页面 而在模型创建向导中。 我在向导的第一步将模型数据存储到DB,并将向导的第二步重定向到第二步。 如果用户在第二步中移动到不同的域页面,我想要销毁它。
我已经找到了一种方法来挂钩onbeforeload事件以向用户显示警告。 但我想警告它只有用户移动到不同的域页而不是第三步。 如果用户想要移动不同的域页面,那么我想销毁存储的数据。
这样做的最佳解决方案是什么?有没有办法检测用户想去哪里?
编辑: 在第二步中,我想从用户上传文件(使用jQuery File Uploader上传ajax)创建模型,并与第一步的模型相关联。因此,如果我可以将哪个ID分配给第一步的模型,那么我可以轻松地将其与之关联。这就是我想要在第一步中存储数据的原因。
我不希望在用户明确离开向导之前使到期的模型失效。 然后我可以检测用户是否仍然打开向导,只是停止很长时间或 已离开向导页面? (我想像桌面应用程序一样构建应用程序,这样用户就可以拥有未保存的文件,直到明确地在多个浏览器窗口上离开向导)
答案 0 :(得分:0)
这是不可能的。卸载页面后,您无法执行任何其他操作。如果用户正在加载另一个域页面,那么该域名可以控制页面,而不是你。
您应该做的是将向导页面的数据存储在数据库中,而不是存储在会话状态,甚至存储在cookie中,这是一种很好的做法。然后,当用户到达向导的最后一步时,您将从cookie / session读取数据并立即写入db。
答案 1 :(得分:0)
您无法在onbeforeunload
事件或其他任何事件中确定用户的预期目的地。您也无法阻止用户加载其他网页的请求,而是将其重定向到某些destroy
操作,然后再将其发送出去。
如果您满足于在用户通过向导进行的每一步中将数据存储到数据库中,您可以考虑设置一个cron作业来运行您创建的rake任务,该任务可以通过并删除不完整的向导超过一定年龄。
cron (或等效的)实际上是我考虑做的事情,即使你可以检测到用户离开你的网站。