如果想用Flash/Flex监听浏览器的关闭事件,
可以通过JavaScript的window.onbeforeunload事件进行监听
然后JS调用Flash中的函数。
在swf所在页面的JavaScript中添加如下代码
JS中代码:(这里设定swf文件名为TestFlash)
window.onbeforeunload = onbeforeunloadHandler; //添加响应函数
function onbeforeunloadHandler()
{
var swfRef = document.TestFlash|| window.TestFlash; //获取swf的引用
if ( swfRef ) {
warning = swfRef.windowCloseHandler(); // 调用Flash中的windowCloseHandler函数
return “Are you sure to close this page?”;
}
}
AS中代码:(在程序初始化的函数中添加,例如Flex的creationComplete事件中)
if(flash.external.ExternalInterface.available){ flash.external.ExternalInterface.addCallback(‘windowCloseHandler’,externalWindowCloseHandler);
//使用ExternalInterface向JS中添加调用函数
}
/*
* 告诉服务器,该flash已经被关闭
*/
protected function externalWindowCloseHandler():void{
//use HttpService in Flex
var http:HTTPService = new HTTPService();
http.url = ‘http://localhost/testphp/index.php?from=flexcloseByHTTPService’;
http.send();
//use URLLoader in AS3
var request:URLRequest = new URLRequest(‘http://localhost/testphp/index.php? from=flexcloseByUrlLoader’);
var urlLoader:URLLoader = new URLLoader();
urlLoader.load(request);
}
Flex中可以在FlashBuilder的HTML模板上添加JS代码
修改html-template中的index.template.html文件
在其中添加JS代码:
window.onbeforeunload = onbeforeunloadHandler; //添加响应函数
function onbeforeunloadHandler()
{
var swfRef = document.${application}|| window.${application}; //获取swf的引用
if ( swfRef ) {
warning = swfRef.windowCloseHandler(); // 调用Flash中的windowCloseHandler函数
return “Are you sure to close this page?”;
}
}
在AS中直接注入JS代码
如果不想更改HTML文件,也可以在AS中直接书写JS代码,注入到HTML文档中
if(flash.external.ExternalInterface.available){
var jsStr:String;
jsStr =
‘eval(\’window.onbeforeunload = onbeforeunloadHandler;’ +
‘function onbeforeunloadHandler(){‘ +
‘var swfRef = document.’+FlexGlobals.topLevelApplication.className+’ || window.’+FlexGlobals.topLevelApplication.className+’;’ +
‘swfRef.windowCloseHandler();’ +
‘return “Are you sure to close this page?”;’ +
‘}\’)';
flash.external.ExternalInterface.call(jsStr);
flash.external.ExternalInterface.addCallback(‘windowCloseHandler’,externalWindowCloseHandler);
}
移除该监听
只要设置window.onbeforeunload=null即可
AS中可以这样写
flash.external.ExternalInterface.call(‘eval(\’window.onbeforeunload = null\’)');
flash.external.ExternalInterface.call(‘eval(\’location.reload();\’)'); //再执行刷新浏览器的命令
由 Jack 撰写
From - http://blog.ityao.com/archives/581
分享到:
相关推荐
### Flex监听浏览器关闭事件 在Web开发中,有时我们需要对用户关闭浏览器窗口的行为进行监听,并在用户尝试关闭页面时给出提示或执行某些操作。本文将详细介绍如何利用Flex结合JavaScript实现这一功能。 #### 1. ...
在Flex4中,我们可以利用Flash Player提供的API来监听浏览器关闭事件。虽然Flex应用本身不能直接控制浏览器行为,但可以监听到浏览器即将关闭的信号,从而进行一些必要的清理工作或显示确认对话框,询问用户是否真的...
在Flash AS3中,通常在`Main`类的`initialize`或`construct`方法中设置舞台大小、加载资源、创建3D对象以及绑定事件监听器。开发者会在这里调用Flare3D库,并创建场景、摄像机、光源等元素,同时定义3D物体的运动和...
该文件是一个基于Flex框架创建的MXML应用程序,用于获取浏览器URL中的参数并显示在界面中。Flex是一个用于构建富互联网应用程序(RIA)的开源框架,它基于ActionScript和MXML,通常与Adobe Flash Player或Adobe AIR...
"chatapp.swf"是Flash MX或Flex编译生成的SWF文件,它是实际运行在用户浏览器上的应用程序。这个文件包含了聊天室的用户界面和逻辑。使用Flash MX,开发者可以使用时间轴和图形工具创建动态UI,同时使用ActionScript...
在"震动按钮.fla"中,开发者可能使用ActionScript(Flash的编程语言)编写了控制按钮震动的代码,可能包括时间轴控制、事件监听、动画帧序列等元素。ActionScript允许开发者为按钮添加复杂的交互逻辑,如点击响应、...
5. **事件驱动编程**:Flash和Flex应用程序通常基于事件模型,当用户进行操作或者程序状态改变时,会触发相应的事件,开发者可以注册事件监听器来响应这些事件。 6. **发布和跨平台**:Flash内容可以发布为SWF文件...
通常,这涉及到对不同浏览器的事件处理进行适配,可能包括使用Flash Player的内置API、自定义事件监听以及处理浏览器特定的事件模型。 在Flex中,我们可以通过以下步骤实现多浏览器右键支持: 1. **捕获鼠标事件**...
3. **事件监听**:Flex和Flash都可以监听和触发事件,通过注册事件监听器,一个组件可以响应另一个组件的事件,从而实现复杂的交互逻辑。 4. **数据共享**:在Flex和Flash之间共享数据是常见的需求,可以使用`...
2. **Flex**:Flex 是一个用于构建跨浏览器和操作系统运行的丰富互联网应用程序(RIA)的开源框架。Flex 基于 MXML 和 ActionScript 构建,能够快速构建高质量的应用程序。 #### 四、本书结构与特点 - **编写团队*...
- **事件处理**:Flex的交互事件(如点击、拖拽)可以被监听并处理,然后通过与JSP的通信,实现数据的更新或进一步操作。 - **报表设计**:Flex提供多种图表类型,如条形图、饼图、线图等,可以方便地定制报表样式...
Flex也能监听JavaScript的事件并作出响应,例如: ```as3 ExternalInterface.call("jsFunction", "parameters"); ``` 在实际应用中,这些通信方式可以用于实现诸如按钮点击事件的传递、数据交换、状态更新等...
这段代码会在整个舞台(stage)上监听右键点击事件,当事件发生时,调用`contextMenuHandler`函数并阻止其默认行为,即关闭默认的右键菜单。 然而,仅仅阻止默认菜单并不足够,有时我们还需要自定义右键菜单。在...
4. **Flash Player**: Flex编译出的应用通常运行在Flash Player上,这是一个跨平台的浏览器插件,能够播放SWF格式的Flash内容。Flash Player支持视频、音频、动画以及交互式内容,使得Flex应用能够在多种设备上运行...
4. **事件驱动编程**:在Flex和Flash中,用户交互是通过事件驱动模型来处理的,比如点击按钮播放视频,这需要理解事件监听器和事件处理函数的工作原理。 5. **用户界面组件**:Flex提供了丰富的UI组件库,如...
标题中的"Flash Flex与JS通信"指的是如何让运行在Adobe Flash Player中的Flex应用与浏览器中的JavaScript代码进行数据交换和功能调用。这种通信机制通常被称为External Interface或Bridge技术,它允许Flex应用与网页...
js可以通过`postMessage()`向Iframe发送消息,而Flex应用监听`window.message`事件来接收这些消息。确保发送和接收方都正确设置目标Origin以防止跨站脚本攻击。 ```javascript // js 代码 var iframe = ...
在IT行业中,自定义组件是开发用户界面时的一项重要技能,特别是在使用Flex或Flash进行富互联网应用程序(RIA)开发时。本示例聚焦于创建一个自定义组件——搜索栏,这是许多网站和应用中常见的功能元素。让我们深入...
9. **跨平台兼容性**:Flex应用运行在Flash Player上,而Flash Player可以在多个操作系统和浏览器上运行,使得Flex播放器具有较好的跨平台兼容性。 10. **测试与调试**:开发过程中,需要对播放器进行详尽的测试,...