使用JavaScript / ActionScript监视来自同一域的浏览器窗口

时间:2009-06-23 10:03:54

标签: javascript flash actionscript

我的网页加载了一个后台闪存,它将使用套接字连接到服务器。 如果用户打开我的网站的多个窗口/标签,服务器将获得多个套接字连接。知道如何确保只有一个套接字从同一个用户和同一个浏览器连接?

我正在考虑使用Javascript监视窗口关闭事件,如果连接到服务器的窗口关闭,其他窗口之一将尝试连接到服务器。但我找不到听这个事件的方法。

我也想到了Flash的LocalConnection,但找不到一种方法来分配唯一的连接名称并让其他闪存知道。

3 个答案:

答案 0 :(得分:1)

您可以使用LocalConnection在Flash中执行此操作。

加载影片时,尝试将测试邮件发送到某个LocalConnection ID。如果失败则连接未打开,在这种情况下,您打开它以侦听命令,并通过套接字连接到服务器。

如果成功,那么已经有一个连接到服务器的SWF正在运行。您可以将SWF通过LocalConnection获得的任何服务器请求发送到连接到服务器的服务器请求。

如果您需要获得回复,那么您可能需要让其他SWF打开自己的本地连接(随机ID)并将其注册到连接到服务器的SWF。

当连接的SWF关闭(窗口关闭)时,对该LocalConnection的所有发送都将失败。在这种情况下,您的其他SWF将开始出错。其中一个必须打开该连接并成为“主要”SWF(成功打开连接的第一个)。

生命周期有点奇怪,并且可能需要处理许多极端情况以确保它保持稳健,但它是一种选择。但是,我注意到随着连接数量的增加,LocalConnection会变得不可靠,所以你最好找到不同的解决方案。

答案 1 :(得分:0)

您正在寻找的事件称为卸载。假设您使用window.open启动窗口,您可以这样做: -

var win = window.open(url)
if (win.attachEvent)
    win.attachEvent("onunload", function() { // stuff when window closes });
else
    win.addEventListener("unload", function() { // stuff when window closes }, true);

然而,依靠卸载事件的痛苦经历可能有点不可靠。

修改

如果用户通过自己的方式打开这些窗口,那么答案很简单,这是不可能的。

答案 2 :(得分:0)

您只能控制自己打开的窗户。没有客户端方法来控制其他窗口/标签(也没有服务器端方式来区分它们)。