2012-01-17 3 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 Script ExternalInterfacе как:

ExternalInterface.addCallback("save",handleOnSave); 

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

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

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

Security.allowDomain("*"); 

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

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

OK попробовать/поймать вернулся Error # 2176!

+0

Для справки: # 2176 - Некоторые действия, например всплывающие окна, могут вызываться только при взаимодействии с пользователем, например, щелчком мыши или нажатием кнопки. –

ответ

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 e, чтобы увидеть, что-то еще не так.

EDIT:

Как показывает выяснить ошибку

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

+0

Затем, как показано на рисунке, используйте try ... catch и find error. Я обновил ответ. – Diode

+0

Или вы можете попробовать создать конфигурацию отладки с этим URL-адресом и определить проблему. – Diode

Смежные вопросы