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 限制输入脚本大全
Nov 03 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
Dec 07 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
Mar 14 Javascript
js用拖动滑块来控制图片大小的方法
Feb 27 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
Vue 中 a标签上href无法跳转的解决方式
Nov 12 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
Jul 20 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
咖啡的传说和历史
2021/03/03 新手入门
ajax 的post方法实例(带循环)
2011/07/04 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
推荐20家国外的脚本下载网站
2011/04/28 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
js切换光标示例代码
2013/10/10 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
python实现统计代码行数的方法
2015/05/22 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书