几周前,我已经决定适当解决浏览器窗口之间的相同域核心通信问题。
例如,打开多个页面使用相同的域名的情况,实际上,即使是完全不同的域名,也很容易使用这种想法。 怎么样? 我将为此写另一个文档-但它很简单。
整个想法基于本地网络的工作方式,在解释其工作方式之前,需要解释当前的技术及其存在的问题(在这里我们不是在讨论弹出窗口及其父级)。
通常,浏览器窗口之间有4种通信方式:
- 使用窗口对象(据我所记得,名称属性),这是非常不安全的方式,导致其他页面能够读取该属性,对于不同的实例,它也无法正常工作。 我认为绝对不应将其用于交流目的。
- 结合域属性更改操作嵌入式框架,并使用相同的框架/弹出窗口名称-这是您在知道外部嵌入式iframe存在的情况下访问外部嵌入式iframe的方法,并尝试使用该名称打开弹出窗口将返回对iframe的引用。 此方法不适用于所有浏览器,并且非常混乱(可能您总是会出现一些疯狂的控件弹出窗口的初始时刻)。 这样做的好处是:直接访问您的远程对象-您直接通过框架访问它们,所以这很不错。 该解决方案还存在其他一些小问题(域名限制,服务器端必要的额外文件等。。。这只是一个痛苦)。
- 不幸的是,如果所有浏览器都支持“ postMessage”之类的方法的新规范,这将是很棒的-事实并非如此,并且域名限制因浏览器类型的不同而有所不同(有点烦人)。 将2 + 3组合在一起会为所有浏览器带来痛苦的解决方案-但是警告是:这将是一个痛苦,并且请记住postMessage方法的行为类似于基于网络的通信。
- 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的任何浏览器版本上使用,包括移动设备等。
该解决方案可以很容易地实现,即使在不同的域之间也可以进行通信:-)如果值得添加它,请给我大喊。