js调用flash里面的代码兼容和新的问题

jackxiang 2009-12-23 20:06 | |
http://www.qgy18.com/2009/08/flash_externalinterface/
http://www.qgy18.com/file/code/1.html


理论是js调用flash里面的代码是合情合理的,但是遇到firefox里面的代码不兼容(上面来你哥哥链接探讨的)也就罢了,但是,发现在firefox下出现flash没有加载完毕js就去调用flash里面的代码了,于是用了个什么:setTimeout(函授入口地址名称,2000);

window.setTimeout("show_date_time()", 1000);

其实在flsh一加载就把该函数给写上可以避免必须加载完毕才能调用?
解决了该问题,但是2秒啊,其主要原因是flash是广告的flash页面较大,造成加载缓慢,有没有办法通过firefox中的js某些函数判断firefox中的flash已经加载完毕了呢?google了一下好像有喔:
1.jquery来判断:
      判断Flash加载完毕,然后再传递值进去。


function thisMovie(movieName) {
  if (navigator.appName.indexOf("Microsoft") != -1) {
    return window[movieName]
  }else {
    alert(document.embeds[movieName]);  
    return document.embeds[movieName];
  }
}

    
步骤:01、我首先想到是否可以在HTML的<body>中用onload方法。
          但是,失败。
      02、后来我想到是否可以在Flash中用Actionscript判断是否加载完毕,
          如果加载完毕,那么getURL或者fscommand一下调用HTML中的Javascript函数。
          感觉比较复杂。
          但是这个应该肯定行的通。
      03、最后我想到了用jQuery来判断Flash是否加载完毕。
          下面的代码:
$(document).ready(function(){
});
          和onload方法几乎一样,都是在Flash加载之前就执行了。
      04、因此我去搜了一下,还真有这样的插件:
          http://www.malsup.com/jquery/media/
          这个是媒体文件的插件,可以有mp3/mov/swf/wma等等。
          但是就在这个网站上,它推荐,如果只是用Flash的话,
          还是:
          http://jquery.lukelutman.com/plugins/flash/
          比较好。
          网站简单,不过很够用。
      05、目前看到的是1.0.1版本,文件名是jquery.flash.js
      06、首先你得给它加载进来:
<script src="static/jquery.flash.js" type="text/javascript"></script>
          然后在HTML的<body>之间加上:

<body>
<div id="flash"></div>
</body>
          然后是写我们自己的Javascript代码:
<script language="javascript">
   $(document).ready(function(){
        $('#flash').flash(
            { src: 'static/flash.swf',
              width: 720,
              height: 480,
              flashvars: { str3: 'aa', str4: 'bb' }
            },
            { version: 8 }
        );
    });
</script>

       07、这里的src是文件的位置。
           width是宽,height是高,
           flashvars是变量。
       08、我们在flash中有一个动态文本框,实例名称是newtest。
           另有几行代码:
stop();
newtest.text = str3;
           str3就是我们从外面传递进来的变量值。
       09、是的,就这样。
           我们就能在Flash中看到显示:aa了。

高级:我现在在考虑能否在网页显示的过程中改变flashvars。
      即,我按一个按钮,更新str3的值。        
      目前只能实现重新建一个flash对象,非常不爽。

2.js 判断flash加载进度源码
有时候我们需要判断一个flash加载了多少;我们可以用js判断:

<div id="d1">
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="mFlash"
WIDTH="600" HEIGHT="300">
<PARAM NAME=quality VALUE=high>
<param name="Play" value="-1">
<PARAM NAME=movie VALUE="http://www.toto369.net/sydm/52.swf">
</OBJECT>
</div>
<input id="txt" type="text" value="">
<div id="d2" style="visibility:hidden">
flash已经加载完成
</div>
<script language="javascript">
function ck()
{
var mFlash=document.getElementById("mFlash");
var txt=document.getElementById("txt");
txt.value=mFlash.PercentLoaded()+"%"
if(txt.value=="100%")
{
document.getElementById("d2").style.visibility="visible"
clearInterval(timer)
}
}
var timer=setInterval("ck()",1000)
</script>



其实最好还是flash加载完毕后调用我们的js或者去外边取数据,这种架构要秀气多了。

本站参考:
http://www.jackxiang.com/post/2370/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2371/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2009-12-24 10:19
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]