关闭聊天室窗口NetConnection不断开的问题及其解决
问题:
将一个视频聊天室系统从FCS升级到FMS,目前的客户端是Flash player 8,客人从浏览器登陆后,选择一个聊天室进入,此时会弹出一个新窗口,聊天室就在新窗口中。但是当关闭聊天室的时候,却并没有触发FMS程序中的onDisConnect事件,客人仍然可以听到聊天室中的声音,必须关闭所有的浏览器窗口,才会完全退出聊天室。
又一个测试:
后来又做了一个实验。先开一个带有Flash内容的窗口(和聊天室无关的站点),然后打开聊天室站点页面,再打开聊天室页面。关闭的时候先关闭聊天室页面,再关闭聊天室站点页面,发现NC仍然没有断开。直到关闭所有含有Flash内容的页面,才真正断开。
分析原因:
虽然是3个窗口,但是仍然使用的是一个ie进程,而且默认情况下所有的窗口都是一个进程。虽然聊天室窗口关闭了,但是因为其他窗口没有关闭,IE进程也没有关闭。swf文件仍然存在于ie的缓存中,所以NC连接仍然保持。如果关闭所有的窗口,IE的进程关闭了,那么NC就自然断开了。
证明分析:
为了验证上面的分析,我通过修改注册表强制IE每次打开都是单独的进程,上面的问题不复存在。
解决方法:
首先就是考虑将整个聊天室网站改成纯Flash版本,这样就不需要弹出窗口,聊天室直接就在主页,当关闭了聊天室窗口也就关闭了所有当前网站的相关窗口。不过由于上面实验发现的原因,即使是关闭了聊天室网站的窗口,如果没有关闭其他带有Flash的窗口,这个问题仍然存在,因此放弃这个思路。
又考虑到弹出窗口的时候弹出一个没有任何关闭按钮的窗口,在Flash中提供一个关闭按钮,这个关闭按钮在关闭聊天室窗口的同时也关闭NC对象。不过目前的浏览器种类繁多,不能保证用户使用的就一定是IE浏览器。
最后考虑到,窗口在关闭的时候会触发一个JavaScript的onUnLoad事件,为何不在这个事件中通知Flash关闭NC连接?按照这个思路更改程序,解决了此问题。
- 文章ID:74
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/nc-break/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。