Flash ExternalInterface.addCallback错误

时间:2012-01-17 15:58:29

标签: flash actionscript-3 externalinterface

所以我有一个功能:

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);  

我想要做的是将此按钮放在flash之外,并使用ExternalInterfac中的Java脚本调用此函数,如:

ExternalInterface.addCallback("save",handleOnSave);

但浏览器返回

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

我尝试调用仅返回成功警报的功能,并且工作正常。我搜索了这个,人们建议的唯一的事情是使用

Security.allowDomain("*");

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

编辑:

确定try / catch返回错误#2176

1 个答案:

答案 0 :(得分: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代码,看看是否有其他错误。

编辑:

如图所示,找出错误

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

            ...existing code...

        }catch(error:Error){

            return error.message;

        }

        return "";
 }

并在Javascript中收到错误。