- 浏览: 1428071 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (564)
- 算法 (7)
- 流金岁月 (1)
- Javascript (30)
- actionscript (108)
- as3.0 game (14)
- flex (84)
- fms2 (27)
- 正则表达式 (7)
- 开源组件代码(as3.0) (1)
- Pv3d (13)
- Cairngorm (4)
- vbs (54)
- VB程序设计 (26)
- 计算机应用与维护 (4)
- 职场实用穿衣技巧 (3)
- 历史风云 (15)
- 淡泊明志,宁静致远 (12)
- 情感 (26)
- 杂谈 (41)
- 越南风 (14)
- DirectX (9)
- Dev-cpp (11)
- 回望百年 (2)
- 建站经验 (2)
- Python (24)
- 网络赚钱 (4)
- php (2)
- html (1)
- ob0短址网 (1)
- ob0.cn (1)
- wordpress (1)
- pandas logistic (1)
- haxe (1)
- opencv (1)
- 微信小程序 (3)
- vue (3)
- Flutter (1)
最新评论
-
GGGGeek:
第一个函数滚动监听不起作用,onPageScroll可以
微信小程序--搜索框滚动到顶部时悬浮 -
naomibyron:
解决办法:工具 -> 编译选项 -> 编译器 ...
dev-c++中编译含WINSOCK的代码出现错误的解决方法 -
haichuan11:
这个…… 代码不全真的是让人很憋屈的感觉啊
actionScript 3.0 图片裁剪及旋转 -
chenyw101:
老兄能留个QQ号吗?具体的我有些东西想请教下你
用VB制作网站登陆器 -
yantao1943:
貌似有点问题,只派发一次事件啊
使用ActionScript 2.0或ActionScript 3.0处理音频文件的提示点(cue
as和js通信最早用的是fscommand,这个我就不说了,老生常谈了,我们这里说的是ExternalInterface这个接口。大家都知道的或者一帮在网上能查到的东西我就不费吐沫了,捡最实在的说。ExternalInterface有两个方法,一个是call,是as调用js,这个没什么说的,我们现在主要说addcallback这个函数,这个函数是as注册一个函数,然后让js通过调用flash这个object对象来调用as注册的这个函数。注意,我这里说的是“js调用flash这个object对象来调用as注册的这个函数”,这里我强调了先调用object对象,然后再调用函数,为什么要这么强调呢,因为大家在开发过程中会遇到两个坎,一个是调用flash对象调用不到,一个是调用函数调用不到了。下面我们就针对这两种情况进行详细说明。
有很多朋友在开发过程中会遇到过下面这些情况,在开发一个js函数上来就调用as的一个函数的时候,页面会报错,提示找不到这个flash对象,或者函数没有定义。Flash8的时代,针对ExternalInterface这个类,文档里只说明了怎么用,而没有具体说怎么合理的组织和页面的结构,一直到了cs3的时代,帮助里才说明了正确的函数注册和js调用的过程,具体的见Flash cs3帮助。大概的代码如下:
js部分:
<script>
var jsReady=false;
var swfReady=false;
function isReady(){
return jsReady;
}
function setSwfIsReady(){
swfReady=true;
getSWF(”flashobj”).fun()
}
function pageInit(){
jsReady=true;
}
function getSWF(movieName) {
if (navigator.appName.indexOf(”Microsoft”) != -1) {
return window[movieName+”_ob”];
} else {
return document[movieName+”_em”];
}
}
onload=function(){
pageInit();
}
</script>
注意,在getSWF函数里我用了 return window[movieName+”_ob”]和return document[movieName+”_em”],为什么这样用我会在下面说明,一帮的情况下只需要用movieName就可以了
as部分
private function registerJsFun():void{
if(ExternalInterface.available){
try{
var containerReady:Boolean=isContainerReady();
//ExternalInterface.call(”ceshi”,”registerJsFun:”+containerReady);
if(containerReady){
//注册函数
setupCallBacks();
}else{
//检测是否准备好
var readyTimer:Timer=new Timer(100);
readyTimer.addEventListener(TimerEvent.TIMER,timeHandler);
readyTimer.start();
}
}catch(error:Error){
trace(error)
}
}else{
trace(”External interface is not available for this container.”);
}
}
private function timeHandler(event:TimerEvent):void{
var isReady:Boolean=isContainerReady();
if(isReady){
Timer(event.target).stop();
setupCallBacks();
}
}
private function isContainerReady():Boolean{
var result:Boolean=Boolean(ExternalInterface.call(”isReady”));
return result;
}
private function setupCallBacks():void{
ExternalInterface.addCallback(”fun”,fun);
ExternalInterface.call(”setSwfIsReady”);
}
具体我就不解释了,不明白的同学可以仔细去看下cs3帮助,大概的意思就是页面开始渲染的时候js去调用swf对象,有可能swf对象没有完全load完,所以这个触发器要从flash开始,当flash加载的时候就开始不停的调用页面的一个函数,取一个页面是否加载完毕的标识,当pageonLoad后,这个标识为true了,说明flash也加载完毕了,这个时候flash再开始注册函数,同时调用页面的js,让js调用Flash对象,感觉绕了一大圈,但这是官方推荐的方法。在flash8的时候,我不知道这么用,采用了一种比较笨的办法,就是setTimeout执行addCallback来注册as函数,大家可能要问为什么这么麻烦。我再后面会说明。
好了,现在我举两个最实际的例子,在我开发搜狗音乐盒的时候,因为播放音乐的工作完全交给mediaPlayer这个微软的Object。然后又要在flash里实时的显示歌曲的进度,音量等信息,不得不频繁的在as和js之间不停的调用,那段时间简直痛不欲生。而且mediaPlayer这个对象还有好多版本的内核,从6.4到11,当时我了解了不少这方面的信息,如果有同学对这个感兴趣,可以写mail给我。扯远了,继续说我们这个问题,当时产品上线的时候,在我本机的resin上测试,没有任何的问题,但是一上真实的生产环境,就出问题了,什么问题呢,IE和ff下是没有问题的,问题处在tt(就是腾讯那个浏览器)和遨游浏览器上,清掉浏览器的cache,没有问题,第2次刷新的时候,产生脚本错误,调用as函数失效。而在我本机怎么测都没有问题,后来发现原来是我本机没有设置resin的cache,既没有过期头。为什么一有cache as注册的函数就失效呢,这也是为什么cs3的时候出了一套规范的流程来规定如何使用addCallback,因为flash一旦在浏览器里cache住,如果在as里一开始就addcallback就会失效,至于为什么我到现在也说不清楚,解决的办法就是用官方的办法,如上的代码或者用我当时的笨办法
setTimeOut(registerFun,50)
registerfun就是实现addCallBack的函数,这样就能避免TT和遨游浏览器下如果cache住的时候,addcallback失效的问题。
还有一个办法我没有尝试,就是如果你是 用Flash开发,把displayObject放在第一帧,而addCallback放到第二帧上,为什么这么做呢,这是我从Flex那得到的灵感,在Flex下,这样写,在Application里写
creationComplete=initApp();然后在initApp里addCallback
多说一句,Flex程序是分成两帧,第一帧是preload,第二帧才开始渲染界面,然后在Application下有三种状态preinitialize,initialize,creationComplete,这三个的意思分别就是在初始化前,初始化,和界面完全渲染完毕
那么如果你在界面完全渲染完毕的时候addCallback,才能保证有效。
现在我来解释为什么之前我用的return window[movieName+”_ob”]和return document[movieName+”_em”],在IE下,如果object标签和embed表现用同样的id,通过js去访问flash对象的时候,IE会认不出,FF是没有问题的,至于为什么我不知道,所以,我当初在搜狐做视频播放器的时候采用这样的方式
然后你就知道我前面为什么那么写了,所以,劝解大家一句,尽量不要用那个swfObejct.js这个东西,as和js交互起来很麻烦。你可以自己写一个简单的insertFlash.js
function insertFlash(elm, url, w, h) {
if (!document.getElementById(elm)) return;
var str = ”;
str += ‘’;
str += ‘’;
str += ‘’;
str += ‘’;
str += ‘’;
str += ‘’;
str += ‘’;
document.getElementById(elm).innerHTML = str;
}
至于版本的判断和版本的升级,大家去Adobe官方网站去下检测包吧。我就不多废话了,不过上次我用了半天,检测版本号一直不对,检测是否安装倒是可以
好了,先就写这些了,希望对同学们有所帮助
来自:http://www.zhaohongri.cn
发表评论
-
haXe是什么?
2016-01-04 10:50 1023haXe是什么? haXe是一种编程语言,官方网站在 ... -
用EA类图生成AS3代码
2008-10-15 16:18 2691EA(Enterprise Architect)是支持多种流 ... -
变形实例-source
2008-10-15 12:46 1511涂抹原理 橡皮擦原理 import flash.geom.P ... -
actionScript 3.0 图片裁剪及旋转
2008-10-10 12:54 5900package com.wdxc { /** ... -
Flash(AS3)读取Excel文件
2008-10-09 13:29 5119var excelXml:XML; var loader=ne ... -
AS3 Loading的制作方法
2008-10-09 13:28 6041AS2的时候做LOADING有很多种方法,做起来也得心应手可是 ... -
让"Flash" 写文件(AS3)
2008-09-11 16:23 1768目前,出于安全考虑Flash不支持写文件的操作,在AS3的A ... -
AS3 中的 拖动 及 碰撞 检测
2008-09-11 16:11 2915没有press和release事件 hitTest()被分尸 ... -
Flash CS3制作Fla形式的组件
2008-06-16 14:45 1350本文为大家介绍如何制作Flash CS3中的[*.fla]形 ... -
AS3图像处理之剪裁、动态选取
2008-06-15 23:25 2226和师傅写C#写的思维混乱,方法变量几乎第一反应就是大写,习惯都 ... -
从界面入手 划分类
2008-06-15 19:25 1251如何将一个项目细化成各个类呢? 1 从一个项目的界面入手,按照 ... -
AS3-DisplayEffect组件
2008-06-14 20:40 2035[AS3]DisplayEffect组件【组件版本】:0.5【 ... -
KTooltip 工具提示组件
2008-06-14 20:38 1009发布一个小工具KTooltip 。这是0.9beta版,出发日 ... -
AS3.0写的一个滚动条【缓动效果】
2008-06-13 16:10 6375package { import flash.d ... -
一个简单的文本滚动条类 as3
2008-06-13 16:04 4359最近一直做会议与AS3有关项目今天花了点时间写了一个可以选择套 ... -
自定义滚动条类
2008-06-13 16:01 2064在平常的开发中,经常需要用到滚动条,今天将滚动条类整理了下,有 ... -
AS3加载机制
2008-06-13 15:03 2179摸了好一阵子,才弄明白AS3.0的加载机制.还是坚持自己的原则 ... -
写了一个Flash的Transition
2008-06-11 10:36 1721写了一个Flash的Transition package { ... -
JavaScript与ActionScript函数相互调用
2008-06-06 15:07 22521、在JavaScript中调用Flex( ... -
传参之事件代理
2008-06-05 10:23 1084有时候我们在调用事件侦听器的时候,需要给它传进相应的参数,这个 ...
相关推荐
4、使用Flash中的ExternalInterface.addCallback方法创建接口,使JS能够调用AS中的函数。 包含swfobject.js与fla源文件。 (*下载swfObject开发版及示例请访问:http://code.google.com/p/swfobject/) 兼容性,...
自制的,两个简单实例实现Flash与JS的相互调用与传值,仅实现...2、对于传统ExternalInterface.addCallback()方法(即JS调用Flash传递数据实例),存在浏览器兼容性问题。请使用IE浏览器打开html文件方可查看运行结果。
所对应的flash没有加载完,在js就开始调用flash中的ExternalInterface.addCallback()所开放的方法,导致flash还没获取到值时就开始播放音乐,此时,当然播放不了。为了保证能正常传值,就必须在flash加载完后才传值...
js-communicate INTRAS-JS的交互通讯模块,提供了JS中模拟AS3事件监听处理方式用于取代AS直接调页面接口的方式。使用该库将为SWF提供三个接口给JS来调用:notify,用于JS调AS中的接口swf.notify('pausePlayer', [p1,...
ADDCALLBACK(H,回调,FUNC_HANDLE) 将函数句柄 FUNC_HANDLE 添加到执行 CALLBACK 指定的回调时要调用的函数列表。 REMOVECALLBACK(H,回调,FUNC_HANDLE) 删除所有具有指定函数句柄的回调函数(对于指定的回调...
关于Flash和JS相互调用的例子已经说很多了,这不是难题,当然,调用错误这也不是Flash和JS的错误,我们今天就来彻底解决IE,FF和Chrome之间的不兼容问题! 我们知道,Flash中,如果访问外部JS函数,只需 代码如下:...
不用getURL和fsCommand方法 flash使用的actionscript跟javascript是非常相通的,下面描述如何互相调用函数: 1:javascript调用flash中的函数 在flash的脚本中增加 import flash.external.ExternalInterface;...
* 闪光灯状态的改变,默认是自动闪光的,可分为强制打开和强制关闭,已经恢复自动闪光等 */ flash=(Button)findViewById(R.id.main_flash); flash.setOnClickListener(new OnClickListener() { @...
车轮惯性该模块解决了触控板或魔术鼠标发生长时间事件的问题代码的基础来自@msimpson( )的注释请参阅以获取更多详细信息。 查看示例用法 import inertia from 'wheel-inertia'// Add your callbackinertia . ...
jsp和flash函数互相调用的方法ExternalInterface.call和ExternalInterface.addCallback
node-promise 在 Node.js 平台上提供了完整的 Promises 的实现。 The node-promise module features a promise implementation with: Chainable promises Promises throw errors if an error handler is not ...
Deferred由一系列成对的回调链组成,每一对都包含一个用于处理成功的回调(callbacks)和一个用于处理错误的回调(errbacks)。初始状态下,deffereds将由两个空回调链组成。在向其中添加回调时将总是成对添加。当...
extractor.photo.pixiv.tbrl.js 用于Taberareloo的Pixiv提取器补丁。 来自tombfix pixiv提取器的此修补程序端口。看变化代替addCallback->然后addErrback->抓住成功-> Promise.resolve downloadWithReferrer(URL,...
包装器,用于混音器的交互式,carina,REST API和聊天机器人。 在制品 混合器 Mixer是一个交互式流媒体平台。 例子 Carina(JavaScript) const MixerWrapper = require ( "mixer-wrapper" ) ; const channelID =...
将 ActionScript 方法注册为可从容器调用。成功调用 addCallBack() 后,容器中的 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数。
自定义相机实现单拍和连拍功能 SurfaceView surfaceView = (SurfaceView) this .findViewById(R.id.surfaceView); //SurfaceHolder是surface的控制器 surfaceView.getHolder() .setType(SurfaceHolder....
类结构 首先我们来搭一个架子,把需要用到的似有变量都列出来。我们需要一个数组,来保存回调函数列表;需要一个标志位,来表示异步操作是否已完成;... } } addCallback方法 接下来,我们要实现addCallba
Deferred对象在Twsited框架中用于处理回调,这对于依靠异步的Twisted来说十分重要,接下来我们就以实例解析Python的Twisted框架中Deferred对象的用法 Deferred对象结构 Deferred由一系列成对的回调链组成,每一对都...
参见和 回调事件 001欢迎 平 CTCP未知的CTCP CTCP_VERSION版本请求(内部处理) CTCP_USERINFO CTCP_CLIENTINFO CTCP_TIME CTCP_PING CTCP_ACTION(/我) PRIVMSG 模式 加入 +更多 AddCallback示例 ircobj....
在上一篇文章里,我们说到了要实现一个Async.Operation类,通过addCallback方法传递回调函数,并且通过yield方法返回回调结果。现在我们就来实现这个类吧。