【问题标题】:Flash ExternalInterface.addCallback errorFlash ExternalInterface.addCallback 错误
【发布时间】:2012-01-17 15:58:29
【问题描述】:

所以我有一个功能:

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 之外,并使用 Java Script 使用 ExternalInterface 调用这个函数,例如:

ExternalInterface.addCallback("save",handleOnSave);

但浏览器返回

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

我尝试调用只返回成功警报的函数并且它有效。我搜索了这个,人们建议的唯一方法是使用

Security.allowDomain("*");

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

已编辑:

OK try/catch 返回错误 #2176

【问题讨论】:

  • 供参考:#2176 - 某些操作,例如显示弹出窗口的操作,只能在用户交互时调用,例如通过鼠标单击或按钮按下。

标签: flash actionscript-3 externalinterface


【解决方案1】:

首先注意到的是

 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 中收到错误。

【讨论】:

  • 谢谢,但我将其更改为 e:MouseEvent = null 但这不是问题,我尝试使这个抛出键盘事件并且它开始工作 handleOnSave。还可以使用简单的警报创建另一个功能,以检查它是否有效并且确实有效。问题出在handleOnSave函数的某个地方,但我想不通
  • 然后显示使用 try...catch 并查找错误。我已经更新了答案。
  • 或者您可以尝试使用此 url 创建调试配置并确定问题。
  • 我尝试捕获并返回错误 #2176
  • 哦...现在我遇到了问题...如果没有 Flash UI 中的用户交互,您将无法执行该功能。这是这里讨论的同一问题stackoverflow.com/questions/2859336/…
猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多