zoukankan      html  css  js  c++  java
  • Flash 与 JS 交互

    Flash/Flex监听浏览器的关闭事件
    由 Jack 撰写  http://blog.ityao.com/archives/581
    如果想用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();\’)'); //再执行刷新浏览器的命令
    From - http://blog.ityao.com/archives/581

  • 相关阅读:
    devenv.exe与devenv.com
    [LeetCode 132] 回文分割II(Palindrome Partitioning II)
    [翻译]More C++ Idioms 取址器(Address of)
    [LeetCode 131] 回文分割(Palindrome Partitioning)
    [翻译]More C++ Idioms 类成员检测器
    C++类的隐式默认构造函数
    [翻译]More C++ Idioms 通过初始化挂接(Attach by Initialization)
    【转】来自微软的纯CSS下拉菜单
    引用asp.net母版页后,母版页和内容页的页面事件执行顺序
    如何解决无法显示隐藏文件/文件夹
  • 原文地址:https://www.cnblogs.com/isoftware/p/3117318.html
Copyright © 2011-2022 走看看