2011-05-14 147 views
0

所以我的团队的项目在JavaScript中嵌入了swf,我们实际上使用java servlet来创建html/JavaScript。我正在尝试使用as3的ExternalInterface来添加一个回调,它会在javascript中调用,但是我尝试过的所有东西都不起作用。从javascript调用as3函数的问题

下面是一些相关的代码:

的Javascript:(记得使用servlet这就是为什么这是所有在字符串中)

<html> 
<head> 
    <script src='/oddmanor/AC_OETags.js' language='javascript'></script> 
    <script language='JavaScript' type='text/javascript'> 
     var requiredMajorVersion = 10; 
     var requiredMinorVersion = 1; 
     var requiredRevision = 0; 
    </script> 
</head> 
<body marginwidth='0' marginheight='0' leftmargin='0' topmargin='0'> 
    <script language='JavaScript' type='text/javascript'> 
    var hasReqestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision); 
    if (hasReqestedVersion) { 
     AC_FL_RunContent(
      'src', 'http://localhost:8080/download/FlashClient', 
      'width', '760', 
      'height', '600', 
      'align', 'middle', 
      'id', 'myswf', 
      'quality', 'high', 
      'bgcolor', '#FFFFFF', 
      'name', 'myswf', 
      'allowScriptAccess','always', 
      'type', 'application/x-shockwave-flash', 
      'codebase', 'http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab', 
      'pluginspage', 'http://www.adobe.com/go/getflashplayer', 
      'wmode', 'opaque', 
      'flashvars', 'challenge=c0oC5CjXjOpRagA0Eh0xi2uYCv-8HZfz-XpG2CCmJHZMnFQK8wYI4kultTUGYGff3N8-5lco_TrR2MfCvnUhVUyCOII6Xtem2rRIPD3SBJ18YxUSkH2GykI78Im2pfqw-UR44OqlOuZGafL3VRkn7KSiMm-AWbZt60MFHzHFaeEhIQke9aj04UkmaJL1MWoOU4CklVxoqX-ag146KilHEroL46JxcD9TLvCW9MG_Gv9fTAYOZK2_FEsHUMg0kP8WjyheWBftNxOuZoHQ9bIsB9EDe9pR4RwZryCjyL6p4T7Si0dMFfmEvml5mkhRYG74yj7pLDKTgHJeURUKOYY9RU9mFbsA82Q8-7cXeGlvQnk' 
     ); 
    } else { 
     var alternateContent = 'Alternate HTML content should be placed here.<BR>' 
     + 'This content requires the Adobe Flash Player. ' 
     + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>'; 
     document.write(alternateContent); 
    } 

    </script> 
    <noscript> 
    <div align="middle" id="swf"> 
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"> 
    <param name="src" value="http://localhost:8080/download/FlashClient"> 
    <param name="width" value="760"> 
    <param name="height" value="600"> 
    <param name="align" value="middle"> 
    <param name="id" value="myswf"> 
    <param name="quality" value="high"> 
    <param name="bgcolor" value="#FFFFFF"> 
    <param name="name" value="myswf"> 
    <param name="allowScriptAccess" value="always"> 
    <param name="type" value="application/x-shockwave-flash"> 
    <param name="codebase" value="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"> 
    <param name="pluginspage" value="http://www.adobe.com/go/getflashplayer"> 
    <param name="wmode" value="opaque"> 
    <param name="flashvars" value="challenge=c0oC5CjXjOpRagA0Eh0xi2uYCv-8HZfz-XpG2CCmJHZMnFQK8wYI4kultTUGYGff3N8-5lco_TrR2MfCvnUhVUyCOII6Xtem2rRIPD3SBJ18YxUSkH2GykI78Im2pfqw-UR44OqlOuZGafL3VRkn7KSiMm-AWbZt60MFHzHFaeEhIQke9aj04UkmaJL1MWoOU4CklVxoqX-ag146KilHEroL46JxcD9TLvCW9MG_Gv9fTAYOZK2_FEsHUMg0kP8WjyheWBftNxOuZoHQ9bIsB9EDe9pR4RwZryCjyL6p4T7Si0dMFfmEvml5mkhRYG74yj7pLDKTgHJeURUKOYY9RU9mFbsA82Q8-7cXeGlvQnk"> 
    <embed src="http://localhost:8080/download/FlashClient" width="760" height="600" align="middle" id="myswf" quality="high" bgcolor="#FFFFFF" name="myswf" allowScriptAccess="always" type="application/x-shockwave-flash" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="opaque" flashvars="challenge=c0oC5CjXjOpRagA0Eh0xi2uYCv-8HZfz-XpG2CCmJHZMnFQK8wYI4kultTUGYGff3N8-5lco_TrR2MfCvnUhVUyCOII6Xtem2rRIPD3SBJ18YxUSkH2GykI78Im2pfqw-UR44OqlOuZGafL3VRkn7KSiMm-AWbZt60MFHzHFaeEhIQke9aj04UkmaJL1MWoOU4CklVxoqX-ag146KilHEroL46JxcD9TLvCW9MG_Gv9fTAYOZK2_FEsHUMg0kP8WjyheWBftNxOuZoHQ9bIsB9EDe9pR4RwZryCjyL6p4T7Si0dMFfmEvml5mkhRYG74yj7pLDKTgHJeURUKOYY9RU9mFbsA82Q8-7cXeGlvQnk" /> 
    </object> 
     This content requires the Adobe Flash Player and a browser with JavaScript enabled. 
     <a href='http://www.adobe.com/go/getflash/'>Get Flash</a> 
    </div> 
    </noscript> 
    <div> 
     <a href='http://d1fjc9whyjwawe.cloudfront.net/KingX_Studios_Terms_of_Service.pdf' TARGET='_blank'>KingX Terms of Service</a> | 
     <a href='http://d1fjc9whyjwawe.cloudfront.net/Privacy_Policy_Odd_Manor.pdf' TARGET='_blank'>Privacy Policy</a> | 
     <a href='http://www.activeboard.com/forum.spark?aBID=138536&topicID=42164567&p=3' TARGET='_blank'>Report a Bug</a> 
    </div> 
    <div id='fb-root'></div> 
    <script src='http://connect.facebook.net/en_US/all.js'></script> 
    <script type='text/javascript'> 
     FB.init(
      { 
       'appId': '191461020878253', 
       'status': true, 
       'cookie': true, 
       'channelUrl': 'http://nimbus.com:8080/oddmanor/fb_channel.html' 
      } 
     ); 

     var callback = function(data) { 
      var res; 
      if (data['order_id']) { 
       res = true; 
      } 
      else { 
       res = false; 
      } 
      var me; 
      if (navigator.appName.indexOf('Microsoft') != -1) { 
       me = window['myswf']; 
      } 
      else { 
       me = document['myswf']; 
      } 
      me.onPurchaseCompletion(res); 
     }; 

     function getFlashMovie(movieName) { 
      var isIE = navigator.appName.indexOf("Microsoft") != -1; 
      return (isIE) ? window[movieName] : document[movieName]; } 

     function getFriendsUsingApp() 
     { 
      alert("ALERRRRRT!!!"); 
      getFlashMovie("myswf").passFriendArrayToFlash(); 
      return "set2"; 
     } 

     function makePurchase(objectInfo) { 
      var obj = { 
       'method': 'pay', 
       'order_info': objectInfo, 
       'purchase_type': 'item' 
      }; 

      FB.ui(obj, callback); 
     } 
    </script> 
</body> 
</html> 



我也撕开了一点的JavaScript代码这与这个问题没有任何关系(希望),所以如果有一个标签丢失或者可能不是我的问题。

注意我正确地嵌入这一点,并获得到SWF允许它调用JavaScript函数(AS3调用getStuff FN),使用ExternalInterface,它的作品,但JS-> AS3没有工作='(

其他注意事项, FlashClient 的SWF的名称....

我不能使用任何东西电影目标(getFlashMovie的返回值),如果我尝试的作品后,不使用代码...

动作脚本代码调用外部接口addCallbac ķ功能正常(称为一个尝试捕捉这就是我知道的) 如果(外部...菱) 外部...的addCallback(“passStuff”,as3PassStuff)

我能想到的唯一的东西; 1)嵌入代码没有正确创建对象,因为我不能使用电影做任何事情 2)我的swf被创建奇怪,并且不允许脚本访问。

我们使用FlashBuilder构建swf。

+1

没有关于swf内部的更多信息,我的猜测是很难找到答案。 – cwallenpoole 2011-05-14 01:53:07

+1

您可以粘贴呈现的HTML而不是Java源代码吗?也尝试使用Firebug来查看你是否可以运行你的javascript函数。 – Satish 2011-05-14 01:59:18

+1

你确定你的getFlashMovie函数正在返回你所期望的吗?如果是这样,那么问题似乎在AS3方面。但请检查以确保您获得了您对该功能的期望。 – prototypical 2011-05-14 02:30:57

回答

2
System.security.allowDomain("*"); 

在我的瑞士法郎,我们很好。