2012-01-17 87 views
0

所以我有一个功能:闪存ExternalInterface.addCallback错误

public function handleOnSave(e:MouseEvent):void 
     { 
      var ml:MultipartURLLoader = new MultipartURLLoader(); 
      var bmData:BitmapData = scrollView.getBitmapData(); 
      ml.addEventListener(Event.COMPLETE, onSaveComplete); 

      // simple string data 
      ml.addVariable("ad_id", ParamsObject.lastInstance.param_id); 
      ml.addVariable("ad_type", ParamsObject.lastInstance.param_type); 
      ml.addVariable("image_width", bmData.width); 
      ml.addVariable("image_height", bmData.height); 
      ml.addVariable("save_data", scrollView.getSavedData()); 

      trace(scrollView.getSavedData()); 
      var jpgSource:Bitmap = null; 

      var jpgEncoder:JPGEncoder = new JPGEncoder(99); 
      var jpgStream:ByteArray = jpgEncoder.encode(scrollView.getBitmapData()); 
      var pngStream:ByteArray = PNGEncoder.encode(bmData); 
      ml.addFile(jpgStream, 'test2.jpg', "pic" , 'image/jpeg'); 
      trace(pngStream.length + ' ' + jpgStream.length); 
      ml.load("/flash/uploadFP.php"); 
     } 

我有按钮来触发它喜欢:

save_btn.addEventListener(MouseEvent.CLICK, handleOnSave); 

我想要做的就是把这个按钮外闪,并调用Java脚本这个函数使用ExternalInterfacе,如:

ExternalInterface.addCallback("save",handleOnSave); 

但浏览器返回

uncaught exception: Error in Actionscript. Use a try/catch block to find error.

我尝试调用函数只成功返回警报和它的工作。我搜索了这个,人们建议的唯一的东西是使用

Security.allowDomain("*"); 

我做到了,但问题仍然存在。

编辑:

OK try/catch语句返回错误#2176

+0

仅供参考:#2176 - 某些操作(例如显示弹出式窗口的操作)只能在用户交互时调用,例如通过鼠标单击或按下按钮。 – 2012-01-17 19:14:17

回答

0

注意到的第一件事是

public function handleOnSave(e:MouseEvent):void ... 

活动e作为参数,您将无法从Javascript传递。

由于e未使用内部handleOnSave你可以这样定义

public function handleOnSave(e:MouseEvent = null):void ... 

所以在Actiobscript的功能,它应该像

public function handleOnSave(e:MouseEvent = null):void{ 
    ..... 
    ..... 
    } 

    ExternalInterface.addCallback("save",handleOnSave); 

,并在Javascript中你可以调用像

document[*flash movie id*].save(); 

请分享您的Javascript cod e看看是否有其他问题。

编辑:

,因为它显示找出错误

public function handleOnSave(e:MouseEvent = null):String{ 
     try{ 

      ...existing code... 

     }catch(error:Error){ 

      return error.message; 

     } 

     return ""; 
} 

,并收到错误在Javascript。

+0

谢谢,但我将它改为e:MouseEvent = null,但这不是我试图使这个抛出键盘事件的问题,它的工作handleOnSave开始。如果它有效并且它做了,也可以用简单的警报来制作另一个功能。问题是在handleOnSave函数中的某处,但我无法弄清楚它 – Yovo 2012-01-17 18:29:31

+0

然后,因为它显示使用try ... catch并发现错误。我已经更新了答案。 – Diode 2012-01-17 18:37:15

+0

或者您可以尝试使用此URL创建调试配置并确定问题。 – Diode 2012-01-17 18:38:08