Flex与JavaScript交互:监听浏览器关闭事件

5星 · 超过95%的资源 需积分: 10 138 下载量 130 浏览量 更新于2024-09-15 收藏 3KB TXT 举报
"本文主要介绍如何在Flex应用中监听浏览器的关闭事件,并在用户尝试关闭浏览器时弹出提示。通过JavaScript与Flash/Flex之间的交互,实现这一功能。" 在Flex开发中,有时我们需要在用户关闭浏览器窗口时执行某些操作,比如保存数据或确认是否真的要离开页面。这个过程可以通过监听浏览器的`onbeforeunload`事件来实现。在描述的场景中,我们首先在HTML页面中的JavaScript部分设置这个事件处理器: ```javascript window.onbeforeunload = onbeforeunloadHandler; ``` 然后定义`onbeforeunloadHandler`函数,该函数会调用Flex中的方法`windowCloseHandler`: ```javascript function onbeforeunloadHandler() { var swfRef = document.getElementById('TestFlash') || window.TestFlash; // 获取SWF对象 if (swfRef) { var warning = swfRef.windowCloseHandler(); // 调用Flash的windowCloseHandler return 'Are you sure to close this page?'; // 弹出关闭提示 } } ``` 在Flex的ActionScript(AS)代码中,我们需要确保`ExternalInterface`可用,并添加一个回调函数`externalWindowCloseHandler`来处理来自JavaScript的调用: ```actionscript if (flash.external.ExternalInterface.available) { flash.external.ExternalInterface.addCallback('windowCloseHandler', externalWindowCloseHandler); } ``` `externalWindowCloseHandler`函数可以用来执行实际需要的操作,例如使用HTTPService或URLLoader发送网络请求: ```actionscript protected function externalWindowCloseHandler():void { var http:HTTPService = new HTTPService(); http.url = 'http://localhost/testphp/index.php?from=flexcloseByHTTPService'; http.send(); // 或者使用URLLoader var request:URLRequest = new URLRequest('http://localhost/testphp/index.php?from=flexcloseByUrlLoader'); var urlLoader:URLLoader = new URLLoader(); urlLoader.load(request); } ``` 最后,Flex项目通常使用FlashBuilder生成HTML包装器(html-template),其中包含`index.template.html`文件,它会嵌入SWF内容并设置JavaScript与Flex的交互。 总结来说,这个技术方案利用了JavaScript的`onbeforeunload`事件结合Flash/Flex的`ExternalInterface`进行通信,当用户尝试关闭浏览器时,先在JavaScript层面触发Flex应用的特定方法,再由Flex应用执行相应的关闭处理逻辑,如发送网络请求。这样可以实现对浏览器关闭事件的监听和用户确认提示,确保数据的完整性和用户体验。