浏览器窗口和标签之间JavaScript通信。

几周前,我已经决定适当解决浏览器窗口之间的相同域核心通信问题。

例如,打开多个页面使用相同的域名的情况,实际上,即使是完全不同的域名,也很容易使用这种想法。 怎么样? 我将为此写另一个文档-但它很简单。

整个想法基于本地网络的工作方式,在解释其工作方式之前,需要解释当前的技术及其存在的问题(在这里我们不是在讨论弹出窗口及其父级)。

通常,浏览器窗口之间有4种通信方式:

  1. 使用窗口对象(据我所记得,名称属性),这是非常不安全的方式,导致其他页面能够读取该属性,对于不同的实例,它也无法正常工作。 我认为绝对不应将其用于交流目的。
  2. 结合域属性更改操作嵌入式框架,并使用相同的框架/弹出窗口名称-这是您在知道外部嵌入式iframe存在的情况下访问外部嵌入式iframe的方法,并尝试使用该名称打开弹出窗口将返回对iframe的引用。 此方法不适用于所有浏览器,并且非常混乱(可能您总是会出现一些疯狂的控件弹出窗口的初始时刻)。 这样做的好处是:直接访问您的远程对象-您直接通过框架访问它们,所以这很不错。 该解决方案还存在其他一些小问题(域名限制,服务器端必要的额外文件等。。。这只是一个痛苦)。
  3. 不幸的是,如果所有浏览器都支持“ postMessage”之类的方法的新规范,这将是很棒的-事实并非如此,并且域名限制因浏览器类型的不同而有所不同(有点烦人)。 将2 + 3组合在一起会为所有浏览器带来痛苦的解决方案-但是警告是:这将是一个痛苦,并且请记住postMessage方法的行为类似于基于网络的通信。
  4. Cookies-旧的,受任何浏览器支持。 Cookies仅用于短消息(实际上cookie的最大长度为4KB,某些浏览器可以处理更多信息,但是大多数流行的最差浏览器的处理能力为4KB,因此这就是“实际上”的原因。
    在我看来,Cookie的大小限制是唯一的问题,似乎其他问题在于实现。

我曾经遇到过所有这些问题,有一天晚上,我对当前的解决方案状态感到非常恼火,并且编写了代码,使用Cookie仅允许与任何浏览器窗口/框架/页面实例交换通信。

解决方案很简单,困难在于实施。

我已经模拟了网络消息传递数据包的流动方式,与BNC网络的工作方式类似,就像我使用的数据包一样:COOKIE。

关于实现的最酷的事情是,可以轻松地从cookie更改为其他共享的东西,并将其与BNCConnector一起使用(我从BNC网络模型中将其命名)。

要测试库,只需签出:

http://theprivateland.com/bncconnector http://theprivateland.com/bncconnector/docs.htm

还有更多详细信息,我想文档页面最好显示用法示例-simpler = better。

该连接器可在使用javascript和cookie的任何浏览器版本上使用,包括移动设备等。

该解决方案可以很容易地实现,即使在不同的域之间也可以进行通信:-)如果值得添加它,请给我大喊。

From: https://bytes.com/topic/javascript/insights/913606-javascript-communication-between-browser-windows-tabs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值