Ошибка Flash ExternalInterface.addCallback - PullRequest
0 голосов
/ 17 января 2012

Итак, у меня есть одна функция:

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 Script, используя ExternalInterfacе, например:

ExternalInterface.addCallback("save",handleOnSave);

но браузер возвращает

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

Я пытаюсь вызвать функцию, которая только возвращает предупреждение об успехе, и это сработало. Я искал это, и единственное, что люди предлагают, это использовать

Security.allowDomain("*");

Я сделал это, но проблема остается.

Отредактировано:

OK попытка / возврат возвращен Ошибка # 2176 !

1 Ответ

0 голосов
/ 17 января 2012

Первое, что заметили:

 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.

...