首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

Flash/Flex监听浏览器的封锁事件(转)

2012-09-16 
Flash/Flex监听浏览器的关闭事件(转)如果想用Flash/Flex监听浏览器的关闭事件,可以通过JavaScript的window

Flash/Flex监听浏览器的关闭事件(转)

如果想用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

热点排行