当站点在2个浏览器窗口中打开时,as3 LocalConnection通信停止工作

时间:2015-09-07 21:02:53

标签: actionscript-3 flash localconnection

我认为我发现了LocalConnection通信设置的flash错误,如此处所述。下面的网站不是我的,我只是用它来表明问题也发生在其他网站上:

如何重现:

http://fcontheweb.com/articles/localconnection/

如果您在2个浏览器窗口中打开该站点,请找到在2个as3组件之间发送消息的as3示例。

单击第一个浏览器窗口中的按钮:它将在本地与消息框进行通信。如果您然后按第二个浏览器窗口上的按钮,则不会发生任何事情。如果您关闭第一个浏览器窗口,则必须在第二个窗口开始工作之前刷新页面。

我认为这是因为两个窗口中的as3对象的命名空间在浏览器的flash播放器插件中重叠,并且通信通道链接被覆盖。

您可以通过再次打开2个窗口轻松验证我的假设,但现在先按下最后一个窗口中的按钮。在该窗口中不会发生任何事情,但消息将显示在第一个窗口中!不知何故,最后一页的接收器没有被创建,因为该名称的接收器已经存在于flash插件的对象存储中。

你能否证实这一点,更有趣的是,有没有人有解决方法呢?是否可以检测swf在本地运行的实例数并将其用于连接名称?

编辑:观察到的行为不是错误,而是预期的行为。但是我的问题仍然存在:如何让同一个浏览器窗口中的页面使用LocalConnection独立于同一系统上不同浏览器窗口中的相同页面进行通信。

1 个答案:

答案 0 :(得分:2)

您的问题中提到的行为是正常行为,而且不是错误。

要了解原因,请将2个打开的窗口视为包含客户端和服务器的2个窗口,并且您的两个服务器将侦听同一端口PORT,并且您的两个客户端都将连接到该端口本地计算机中的端口。因此,当您启动第一个窗口时,服务器将开始侦听来自PORT上的客户端的连接,第二个服务器将无法启动,因为端口PORT已被占用,因此第一个服务器将全部接收客户关系。

关于检测swf在本地运行的实例数量的第二个问题,您只需使用SharedObject

希望可以提供帮助。