flash与javascript交互注意事项
时间:2010-11-27
来源:互联网
网上大多都是帮助文档,其实as和js的交互有很多注意事项,来总结一下:
一.flash到javascript
1. getURL方法
getURL("javascript:s2j_call('参数')","_self");
这个是很古老的了,不过发布成player7或之前的版本都可以支持到它,所以几年来一直用它.
不过只能传递字符串参数,只能做些简单的调用.最致命的是,执行这条语句会导致页面正在加载的异步js进程被阻断,所以如果一个页面渲染了一般flash就发出这个事件,那就等着空白页面吧.
所以现在不要再用这条方法了!
2.ExternalInterface接口
ExternalInterface.call("s2j_call",参数);
发布成8或更高的版本的flash支持该接口,优点是参数可以为json,object,数组,布尔,字符串等,所以和js交互就很方便了.
而且不会阻碍页面异步js进程.目前都使用该方法.
注意:
当flash和页面跨域时候,页面需要允许flash操控其函数,所以在插入flash时,需要加入
二.javascript到flash
这个才是本文的重点,简单来说,就是在flash里绑定js事件,不过要在浏览器和各种页面加载情况下实现这个功能,有以下几点注意事项,缺一不可.
flash里:
ExternalInterface.addCallback("j2s_callback",this, j2s_callback);
function j2s_callback(_p)
{
trace(_p);
}
js里,首先要获得对flash元素的引用,考虑到不同浏览器,需要对object和embed标签都赋予不同的id,然后判断浏览器类型,通过getElementById来获取ref.然后通过ref.j2s_callback来调用flash内方法.
所以,大致的代码会是这样:
var swf_id = "swf_" + (isIE ? "ie" : "other");
var ref = document.getElementById(swf_id);
而html里 object 标签和 embed 标签对应的 id 属性分别是 "swf_ie" 和 "swf_other";
注意:
1.当flash和页面跨域时候,flash里需要加入允许js添加callback的安全许可:
System.security.allowDomain("域");
System.security.allowInsecureDomain("域");
2.由于各个浏览器的缓存机制和页面加载机制都不同,所以不要指望flash在addCallback执行的时候确实相应的js程序已经定义了,如果没有的话,addCallback是不会成功的.
所以,可以设个轮循来检测页面是否初始完成:
this.onEnterFrame = function()
{
if (ExternalInterface.call("s2j_check"))
{
ExternalInterface.addCallback("j2s_callback",this, j2s_callback);
this.onEnterFrame = null;
}
};
现在你以为这段代码完美了吧?其实有很大问题,当s2j_check函数未定义的时候,网页是会报错的.所以还需要将上述代码中轮循js的那一行改为:
if (ExternalInterface.call("function(){try{if(s2j_check()=='ok'){return true;}}catch(ex){}}"))
这样用一个匿名函数去try就万无一失了,什么设个间隔,等几百毫秒再去加载之类的方法就千万别再用了.
页面:
function s2j_check()
{
return "ok";
};
function j2s_callback()
{
//to do 调用flash;
};
这样,就可以保证addCallback之前函数已经被初始化完毕.
作者: 我不是鱼 发布时间: 2010-11-27
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28