JS访问SWF的函数用法实例


Posted in Javascript onJuly 01, 2015

本文实例讲述了JS访问SWF的函数用法。分享给大家供大家参考。具体分析如下:

关于Flash和JS相互调用的例子已经说很多了,这不是难题,当然,调用错误这也不是Flash和JS的错误,我们今天就来彻底解决IE,FF和Chrome之间的不兼容问题!

我们知道,Flash中,如果访问外部JS函数,只需 

flash.external.ExternalInterface.call("JS中的函数名");
这一句即可

如果要JS访问Flash中的函数,需要用addCallBack注册一个回调函数,让JS去调用(AS2例子)

import flash.external.*;
var methodName:String = "SetImgPath";
//JS需要调用的函数名字
var instance:Object = null;
var method:Function = extractstr;
//Flash中实际的函数名字,参数忽略,但是你调用的时候要记得有参数的要加上
var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method);
trace(wasSuccessful+"-callback")

我们可以trace一下,这个时候如果是true,表示注册成功

OK,下面web中试用一下:

<div style="margin-left:50px; margin-bottom:50px"><input type="text" id="mytxt" border="1" value="这是测试框,调用页面JS演示" style="width:200px"/></div>
  <div id="flashContent">
   <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="515" height="320" id="123" align="middle">
    <param name="movie" value="123.swf" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#000000" />
    <param name="play" value="true" />
    <param name="loop" value="true" />
    <param name="wmode" value="transparent" />
    <param name="scale" value="showall" />
    <param name="menu" value="true" />
    <param name="devicefont" value="false" />
    <param name="salign" value="" />
    <param name="allowScriptAccess" value="sameDomain" />
    <!--[if !IE]>-->
    <object type="application/x-shockwave-flash" data="123.swf" width="515" height="320"><!--下面针对非IE内核浏览器--> 
     <param name="movie" value="123.swf" />
     <param name="quality" value="high" />
     <param name="bgcolor" value="#000000" />
     <param name="play" value="true" />
     <param name="loop" value="true" />
     <param name="wmode" value="transparent" />
     <param name="scale" value="showall" />
     <param name="menu" value="true" />
     <param name="devicefont" value="false" />
     <param name="salign" value="" />
     <param name="allowScriptAccess" value="sameDomain" />
    <!--<![endif]-->
     <a href="upload/2011/1/201101281000491420.gif" alt="获得 Adobe Flash Player" />
     </a>
    <!--[if !IE]>-->
    </object>
    <!--<![endif]-->
   </object>
  </div>

OK,我们在Web中加一个button来调用这个flashcall:<input type="button" onclick="flashcall('./image/1.jpg')" value="JS调用SWF">

测试一下:

IE6,7,8,9一切正常

FF:失败

Chrome:失败

失败原因:SetImgPath不是函数,(is not a function /not defined)

这就很奇怪了,我们可以用一个alert,来输出

thisMovie("123"):alert(thisMovie("123"));

输出结果并不是Null,说明已经找到了我们的Flash,但是为啥FF和Chrome就总是找不到函数呢?

逛了各大论坛,比较一致的说法是addCallback必须要是flash加载完毕才能注册成功,好吧,我们加一个settimeout函数,判断是否加载成功,我们改一下上面的flashcall:

function flashcall(str){  
     try{   
  thisMovie("123").SetImgPath(str);//注意,123是上面的ID,而SetImgPath是我们Flash中的注册的回调函数
 }cache(e){
  settimeout("flashcall(str)",100 );
       }
}

恩,我们用个settimeout,每隔100毫秒去调用一次,如果异常就持续调用,直到成功为止!

遗憾的是,始终不成功,程序进入死循环!

通过查阅各种资料,终于找到了原因:

FF中浏览器只认识embed标记,所以如果你用getElementById获 flash的时候,需要给embed做ID标记,而IE是认识object标记的 ,所以你需要在object上的ID做上你的标记

明白了吗?原来在FF和Chrome中,Flash必须用embed才能识别出他的ID,用Object标签是无法识别ID的,我用的Html是Flash自动生成的,都是Object标签,害我调试了一个下午,才明白原来问题出在这里。

知道原因了,就好处理了,改标签:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="515" height="320" id="123" title="123" align="middle">
 <param name="allowScriptAccess" value="always" />
 <param name="movie" value="123.swf">
 <param name="quality" value="high">
  <param name="wmode" value="transparent" />
 <embed src="123.swf" name="123" quality="high" allowScriptAccess="always" swLiveConnect="true" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="515" height="320"></embed>
</object>

把嵌入Flash的标签改为上面的,一切OK!

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
什么是JavaScript
Aug 13 Javascript
基于jquery的loading 加载提示效果实现代码
Sep 01 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
jQuery中html()方法用法实例
Dec 25 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
Aug 01 Javascript
jQuery遍历节点树方法分析
Sep 08 Javascript
javascript中call,apply,bind函数用法示例
Dec 19 Javascript
Angular工具方法学习
Dec 26 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
VUE实现自身整体组件销毁的示例代码
Jan 13 Javascript
React中获取数据的3种方法及优缺点
Feb 18 Javascript
JS随机调用指定函数的方法
Jul 01 #Javascript
JavaScript每天定时更换皮肤样式的方法
Jul 01 #Javascript
JavaScript获得指定对象大小的方法
Jul 01 #Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
Jul 01 #Javascript
JavaScript判断数组是否包含指定元素的方法
Jul 01 #Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 #Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 #Javascript
You might like
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
10条PHP高级技巧[修正版]
2011/08/02 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
js获取class的所有元素
2013/03/28 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python max内置函数详细介绍
2016/11/17 Python
Python3离线安装Requests模块问题
2019/10/13 Python
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
美德少年事迹材料
2014/01/23 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
人事文员岗位职责
2014/02/16 职场文书
感恩小明星事迹材料
2014/05/23 职场文书
世界气象日活动总结
2015/02/27 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript
Python  lambda匿名函数和三元运算符
2022/04/19 Python