相关疑难解决方法(0)

标签或窗口之间的通信

我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS),而不留痕迹.有几个解决方案:

  1. 使用窗口对象
  2. 的postMessage
  3. 饼干
  4. localStorage的

第一个可能是最糟糕的解决方案 - 你需要从当前窗口打开一个窗口,然后只要你打开窗户就可以进行通信.如果您在任何窗口中重新加载页面,则很可能会丢失通信.

第二种方法,使用postMessage,可能启用跨源通信,但遇到与第一种方法相同的问题.您需要维护一个窗口对象.

第三种方式,使用cookie,在浏览器中存储一些数据,这可以有效地看起来像向同一域上的所有窗口发送消息,但问题是你永远不知道所有标签是否已经读过"消息"打扫干净.您必须实现某种超时以定期读取cookie.此外,您受限于最大cookie长度,即4KB.

使用localStorage的第四种解决方案似乎克服了cookie的限制,甚至可以使用事件进行监听.接受的答案中描述了如何使用它.

编辑2018:接受的答案仍然有效,但现代浏览器有一个更新的解决方案,使用BroadcastChannel.有关如何使用BroadcastChannel在选项卡之间轻松传输消息的简单示例,请参阅其他答案.

javascript browser html5 ipc broadcast-channel

136
推荐指数
7
解决办法
7万
查看次数

阻止人们将我的网站加载到多个标签上

我希望用户只能在浏览器中的一个选项卡上浏览我的网站.如何才能做到这一点?我会使用javascript和cookies吗?

例如,我有一个网站:www.example.com - 我希望我的客户只能在一个浏览器中从一个标签访问该网站.如果他们打开另一个选项卡并加载站点(或站点的​​子页面) - 我想要一个警告" 无法打开多个实例 ",然后将它们重定向到错误页面.

一旦注意到 - 如果用户将地址从www.example.com/action/door/mine.aspx更改为www.example.com - 应该可以正常工作,因为用户位于相同(原始)选项卡中.

任何帮助将不胜感激.提前致谢.

javascript browser cookies tabs

21
推荐指数
5
解决办法
4万
查看次数

检测Web应用程序中同一会话的多个选项卡或窗口

我是JavaScript和PHP的新手,所以我有一个问题,如果有一种方法可以在浏览器的网站上检测同一会话的多个选项卡或窗口.在我正在制作的网站上,当用户登录时,布尔(0-1)变量存储在数据库中的用户表中,该变量显示该用户是否已登录.在某人登录并关闭标签或浏览器窗口后,数据库再次更新它更改显示用户是否登录的变量.我这样做的方法是只调用脚本下面

$(window).bind("beforeunload",function(){
 $.ajax({ 
    url: "logout.php", 
    async: false
    });
})
Run Code Online (Sandbox Code Playgroud)

如果用户关闭窗口或选项卡,logout.php将更新数据库.我的问题是,如果有人使用同一网站的同一会话打开多个选项卡,并且只关闭其中一个会话将保留,而数据库将更新该用户不再被记录.

编辑:我不想注销所有打开的标签,我只是不想保留用户仍然在线的数据库,直到他关闭他的会话的所有标签窗口或点击退出按钮.

javascript php jquery

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

javascript ×3

browser ×2

broadcast-channel ×1

cookies ×1

html5 ×1

ipc ×1

jquery ×1

php ×1

tabs ×1