首页 > 软件开发 > JavaScript >

flash如何实现和js交互

来源:互联网 2023-03-16 23:57:32 版权归原作者所有,如有侵权,请联系我们

flash和js通过什么类如何交互?HiU办公区 - 实用经验教程分享!

ExternalInterface 接口,有两个方法call和addCallback。HiU办公区 - 实用经验教程分享!

call的作用:让Flash调用js里的方法。HiU办公区 - 实用经验教程分享!

addCallback是用来注册flash函数让js调用。HiU办公区 - 实用经验教程分享!

flash如何实现和js交互HiU办公区 - 实用经验教程分享!

工具/原料

  • Flash
  • JavaScript

方法/步骤

  • 1

    首先要会编程,JS和AS都要会。HiU办公区 - 实用经验教程分享!

    AS这边主要使用ExternalInterface类。HiU办公区 - 实用经验教程分享!

    简单来讲:调用JS的函数用ExternalInterface.callJS调用AS的方法要先通过 ExternalInterface.addCallback注册接收调用的函数名, 然后再通过JS语句调用: flash对象.注册的方法名()HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 2

    当Flash置于HTML容器中时,经常会遇到AS与JS的通信问题,例如:JS能否调用AS中的变量、方法,AS能否调用JS中的变量、方法等等。答案是肯定的。随着技术的不断发展,解决方案也是多种多样的。HiU办公区 - 实用经验教程分享!

    在我总结的HTML与FLASH之间的“静态”传值一文中提到了JS使用SetVariable方法来设置FLASH中的变量,kinglong认为此法已经过时。对此我表示同意,但上文重点毕竟不是在讨论JS与AS的通信,因此另外对AS与JS通信做一个个人总结,欢迎大家讨论。HiU办公区 - 实用经验教程分享!

    实现JS跟AS的通信,目前可选方法比较多,但早期的方法在使用便捷和功能上都不是很完美。HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 3

    下面做一简要说明:HiU办公区 - 实用经验教程分享!

    getURL  getURL("javascript:history.go(-1)");通过URL协议来访问页面中的javascript,上面控制浏览器历史的代码很眼熟吧,诸如此类我们平时在定制页面收藏,发送邮件时都会经常使用这种方式。虽然你也可以调用页面中自己定义的JS函数,但我个人认为局限性还是比较大,函数的参数传递并不是很灵活,无返回值,而且只能实现AS调用JS,反之不行。HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 4

    fscommand命令HiU办公区 - 实用经验教程分享!

    使用fscommand来调用AS定义的方法也是一个很常用的方式,但我们需要在HTML页面中定义一个具有规定格式的myFlash_DoFSCommand函数,首先定义这个函数我个人就觉得麻烦,而且也只能实现AS调用JS,无函数返回值。HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 5

    SetVariable  HiU办公区 - 实用经验教程分享!

    上面两种方法都只能实现AS调用JS,而SetVariable恰恰相反,只要我们稍微做下处理,他就可以帮我们变相调用AS中的方法。大概思路如下:AS中设置一个状态变量,并使用Object的watch方法对其监视,JS通过SetVariable来修改这个状态变量,一旦侦测到了变量的改变,那就可以根据不同的状态值来选择执行AS中的相应函数了。如果需要考虑用户的低版本播放器,那么你可以考虑下该方法,个人认为还是比较灵活的。HiU办公区 - 实用经验教程分享!

    可以看出上面的这些做法都有一定的局限性,所以在我们的应用中很多时候都不得不将他们结合使用。而下面我要具体介绍的就是 ExternalInterface的做法,通过它你能轻松实现AS与JS的双向方法调用,从而也解决了双向的变量访问,详细介绍可参见FLASH帮助文档和Adobe的官方教程,下面用两个简单例子来说明ExternalInterface的使用。HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 6

    AS调用JS的方法(实例演示)HiU办公区 - 实用经验教程分享!

    Flash中代码:HiU办公区 - 实用经验教程分享!

    //导入包HiU办公区 - 实用经验教程分享!

    import flash.external.*;HiU办公区 - 实用经验教程分享!

    get_btn.onRelease = function(){HiU办公区 - 实用经验教程分享!

    //调用页面中的JS函数HiU办公区 - 实用经验教程分享!

    var temp_str = String(ExternalInterface.call("say", "Hello,World"));HiU办公区 - 实用经验教程分享!

    result_txt.text = temp_str;HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    Html中代码:function say(txt){HiU办公区 - 实用经验教程分享!

    return txt;HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    没错,就这么简单,JS函数定义没有任何要求,AS中使用call方法直接调用就可以了。HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 6该信息非法爬取自百度经验
  • 7

    JS调用AS的方法(实例演示)HiU办公区 - 实用经验教程分享!

    FLASH中代码://导入包HiU办公区 - 实用经验教程分享!

    import flash.external.*;HiU办公区 - 实用经验教程分享!

    //提供JS访问的函数名HiU办公区 - 实用经验教程分享!

    var _method:String = "say";HiU办公区 - 实用经验教程分享!

    //指定本地函数中this变量的作用域,可设置为null留空HiU办公区 - 实用经验教程分享!

    var e_area:Object = null;HiU办公区 - 实用经验教程分享!

    //AS内部函数名HiU办公区 - 实用经验教程分享!

    var method:Function = say;HiU办公区 - 实用经验教程分享!

    //将函数注册到容器列表HiU办公区 - 实用经验教程分享!

    var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, e_area, method);HiU办公区 - 实用经验教程分享!

    //查看注册是否成功HiU办公区 - 实用经验教程分享!

    if(wasSuccessful){HiU办公区 - 实用经验教程分享!

    result_txt.text = "函数注册成功";HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    //本地的函数HiU办公区 - 实用经验教程分享!

    function say(txt:String) {HiU办公区 - 实用经验教程分享!

    result_txt.text = txt;HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    Html中代码:div>HiU办公区 - 实用经验教程分享!

    form>HiU办公区 - 实用经验教程分享!

    input type="button" onclick="callExternalInterface()" value="JS调用AS方法" />HiU办公区 - 实用经验教程分享!

    /form>HiU办公区 - 实用经验教程分享!

    script>HiU办公区 - 实用经验教程分享!

    function callExternalInterface() {HiU办公区 - 实用经验教程分享!

    thisMovie("demo").say("Hello,World");HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    //浏览器兼容访问DOMHiU办公区 - 实用经验教程分享!

    function thisMovie(movieName) {HiU办公区 - 实用经验教程分享!

    if (navigator.appName.indexOf("Microsoft") != -1) {HiU办公区 - 实用经验教程分享!

    return window[movieName]HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    else {HiU办公区 - 实用经验教程分享!

    return document[movieName]HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    }HiU办公区 - 实用经验教程分享!

    /script>HiU办公区 - 实用经验教程分享!

    /div>HiU办公区 - 实用经验教程分享!

    其中红色代码是核心代码,其作用原理是AS端通过addCallback函数把AS内部定义的方法注册为可从容器中调用,允许自定义另外一个方法名供 JS来调用这个方法,函数调用成功返回true,失败返回flase,在此例中通过wasSuccessful变量来判断函数是否注册成功。函数注册成功以后,JS可以通过DOM来访问SWF对象,然后直接调用预定义的方法即可。HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 8

    通过比较可以看出,使用ExternalInterface来完成AS和JS的通信,代码可以更简洁,更清晰,功能也更强大,不过还有些细节你需要了解,需要使用8.0以上的播放器,对于调用的JS函数不能使用递归,同时安全域限制也必须在考虑之中。HiU办公区 - 实用经验教程分享!

    flash如何实现和js交互HiU办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!HiU办公区 - 实用经验教程分享!


    标签: flashJAVASCRIPT编程语言

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号