AS Code:
private init():void{
   ExternalInterface.addCallback("callback_test",callback_test);
}public function callback_test(str:String):void{
   Alert.show("","Flex from: " + str);
}JS Code:
function getSWF(movieName) {
   if (navigator.appName.indexOf("Microsoft") != -1) {
      return window[movieName];
   }
   else {
      return document[movieName];
   }
}
getSWF('m1').callback_test($("#txt1").val());//m1是flash object的ID现象:在IE下可以成功调用,
在FF下出错错误:getSWF('m1').callback_test is not a function
求真相,谢谢!!

解决方案 »

  1.   

    不外呼是两种情况,一种是FF无法识别as这种写法的function 另外就是在你调用的时候还没加载出来。
      

  2.   

    确定 Flash 已经加载完成!
      

  3.   

    喔  还有一种情况。。 你的那个m1 确定FF当时找到这个元素了吗?
      

  4.   


    可以的,我有用Firebug调试。
    对象是找到了,就是不认方法啊!!
      

  5.   


    //就根据这么多代码分析
    function getSWF(movieName) {
       if (navigator.appName.indexOf("Microsoft") != -1) {
          return window[movieName];
       }
       else {
          return document[movieName];
       }
    }
    getSWF('m1')//这是一个function()
    .callback_test($("#txt1").val());//这也是一个function
    //两个不同的function类型的可以这么连在一起吗?
    //m1是flash object的ID
      

  6.   

    不妨先alert一下alert(getSWF('m1').callback_test),看看这个方法到底是否已经确认被定义被接受?
      

  7.   


    刚又试了一下,将flash嵌入代码换了种写法:原始写法:                <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='100%' height='100%' id='m1'>
                        <param name='movie' value='m1.swf?version=3.2.0qa' />
                        <param name='quality' value='high' />
                        <param name='bgcolor' value='#000000' />
                        <param name='allowScriptAccess' value='sameDomain' />
                        <param name='allowFullScreen' value='true' />
                        <!--[if !IE]>-->
                        <object type='application/x-shockwave-flash' data='maaduu.swf?version=3.2.0qa' width='100%' height='100%'>
                            <param name='flashvars' value='video=&code=123CP$$&ver=2.7.8&lang=&maction=&testdb=&country=MY&ref=&notif_t=&userID=&episodeID=' />
                            <param name='quality' value='high' />
                            <param name='bgcolor' value='#000000' />
                            <param name='allowScriptAccess' value='sameDomain' />
                            <param name='allowFullScreen' value='true' />
                            <!--<![endif]-->
                            <!--[if gte IE 6]>-->
                            <p>Either scripts and active content are not permitted to run or Adobe Flash Player version<br />
                                10.1.0 or greater is not installed.</p>
                            <!--<![endif]-->
                            <a href='http://www.adobe.com/go/getflashplayer'>
                                <img src='http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash Player' />
                            </a>
                            <!--[if !IE]>-->
                        </object>
                        <!--<![endif]-->
                    </object>
    新写法(加入embed标签): <object>
        <embed id="maaduu" src="m1.swf" wmode="transparent" quality="high" width="100%" height="100%" align="L" scale="noborder" flashvars="width=300&height=500&color=blue" allowScriptAccess="sameDomain" type="application/x-shockwave-flash">
        </embed>
    </object>
    结果奇怪的事情发生了,
    原始写法是IE可以执行,FF和其它(暂时只测过google chrome)浏览器不能执行!
    新写法则是FF可以执行,IE和其它浏览器不能执行!
      

  8.   


    <object type='application/x-shockwave-flash' width='1' height='1' data='a.swf' id='flashObj' ><param name='movie' value='a.swf' /><param name='allowScriptAccess' value='always'/></object>
    function getSWF(movieName) {
       if (navigator.appName.indexOf("Microsoft") != -1) {
          return window[movieName];
       }
       else {
          return document[movieName];
       }
    }获取到flash 对象后,马上调用flash 函数会出错,我的解决方案:
    1、设置足够长的时间,让falsh 函数加载完毕,在调用 
    setTimeout(function(){getSWF('m1').callback_test($("#txt1").val());},5000);2、递归判断falsh 函数是否加载完毕function checkedFlash(){
    var obj =getSWF('m1');
    if(obj && obj.callback_test){
    obj.callback_test($("#txt1").val());}else{
    setTimeout(checkedFlash,10); // 递归
    }}
    3、 最好的方法是,falsh 函数加载完毕后,由 flash 通知 js 它已加载完毕。
      

  9.   

    回复:hch126163有尝试,FF就一直不执行循环,当然也不报错!
      

  10.   

    感觉这个和加载顺序没有关系,我确定是当flash加载完成后执行的js调用!!!