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 相关文章推荐
js兼容标准的表格变色效果
Jun 28 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
Jul 14 Javascript
13个绚丽的Jquery 界面设计网站推荐
Sep 28 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
May 08 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
js利用数组length属性清空和截短数组的小例子
Jan 15 Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 Javascript
详解Angular2 关于*ngFor 嵌套循环
May 22 Javascript
js+html获取系统当前时间
Nov 10 Javascript
express中static中间件的具体使用方法
Oct 17 Javascript
vue接口请求加密实例
Aug 11 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
PHP ajax 分页类代码
2008/11/13 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
使用PDB简单调试Python程序简明指南
2015/04/25 Python
python实现微信自动回复功能
2018/04/11 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
构建高效的python requests长连接池详解
2020/05/02 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
医学实习生自我鉴定
2013/12/12 职场文书
公司委托书格式范文
2014/04/04 职场文书
开服装店计划书
2014/08/15 职场文书
学校2014年度工作总结
2014/12/06 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
新生开学寄语大全
2015/05/28 职场文书
从事会计工作年限证明
2015/06/23 职场文书
基于docker安装zabbix的详细教程
2022/06/05 Servers