javascript - Javascript 检测在同一个浏览器中打开的两个表单
问题描述
现在我正在做一些 Laravel 项目。我们可以防止在浏览器中多次打开相同的表单吗?情况是这样的:
- 假设我打开了名为“Data form 1”的表单。此页面仍处于打开状态
- 然后,当我打开另一个选项卡并再次打开相同的表单“数据表单 1”时
我能阻止第二个标签吗?或者使用 javascript 为关闭选项卡操作编写弹出警告消息?当用户按下关闭选项卡时,可能会在弹出警告消息上运行此代码window.close()
请帮忙。我对此一无所知。
解决方案
我能理解你为什么需要这个,因为这是一个很常见的情况,特别是如果记录可以由不同的用户编辑,不幸的是,我担心你不能用简单的 JS 来做到这一点。相反,您应该创建一个用于存储状态的数据库表,即locked_records
:
重要的是要理解一个记录可能由多个用户和/或一个用户编辑,但同时使用完全不同的设备。
SQL
CREATE TABLE `locked_records` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tstamp` int(10) unsigned NOT NULL DEFAULT '0',
`userid` int(10) unsigned NOT NULL DEFAULT '0',
`username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`record_table` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`record_uid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`),
KEY `event` (`userid`,`tstamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
因此,当用户开始编辑记录时,您可以locked_records
使用当前时间戳、表名、记录 uid 以及用户的 id 和名称插入一行。
接下来,当有人尝试再次对其进行编辑时,您需要检查记录是否已锁定在数据库中并显示一些警告,例如:
用户 X 于下午 12:14 开始编辑此帖
当用户 X 最终保存表单时,您只需删除锁定记录。
请注意,禁用对锁定记录的编辑可能会很棘手,即当有人打开记录并去吃晚饭时。在这种情况下,您应该通过向用户提供手动解锁记录的链接来处理它(单击它后,您只需删除锁定记录),或者只显示信息:
联系管理员并要求他解锁记录 Y
当然,您可以使用一些 AJAX 在后台检查以检查记录是否仍被锁定一段时间(类似于 StackOverflow 检查帖子和评论更新)
推荐阅读
- javascript - 应用脚本单元格比较不起作用
- html - dartfish.com 是如何编码的?
- microsoft-graph-api - microsoft-graph message ID
- tfs - 跨多个构建代理的 TFS CI(带有批量更改选项)
- javascript - 从过滤器返回单个值
- java - Spark 根据列值设置连续计数器值
- asp.net-core - How to display Swashbuckle parameter object only with fields that should actually be sent?
- php - PHP 和 Postman Curl 无选项错误和证书处理
- python - 如何在 Openpyxl 中找到最大行
- bluetooth - Android 8.1 如何检索耳机的电池电量?