bit.draw(stage,shiftOrigin)在Flash播放器上工作,但不';浏览器上的t;

bit.draw(stage,shiftOrigin)在Flash播放器上工作,但不';浏览器上的t;,flash,actionscript-3,Flash,Actionscript 3,我这里有一个代码,它应该将stage保存到一个文件中,但是当我单击在浏览器上运行包含此代码的函数的按钮时,它不起作用。询问保存位置的窗口未显示 private function cropAndSave():void { var file:FileReference = new FileReference(); var bit:BitmapData = new BitmapData(bm.width, bm.height); var jpgEncoder:JPGEnco

我这里有一个代码,它应该将stage保存到一个文件中,但是当我单击在浏览器上运行包含此代码的函数的按钮时,它不起作用。询问保存位置的窗口未显示

private function cropAndSave():void
{
    var file:FileReference = new FileReference();
    var bit:BitmapData = new  BitmapData(bm.width, bm.height);

    var jpgEncoder:JPGEncoder = new JPGEncoder(95);
    var shiftOrigin:Matrix = new Matrix();

    var now:Date = new Date();
    var outputFileName:String = now.getTime()+"_scrapeenet";

    outputFileName += ".jpg";

    shiftOrigin.translate(-bm.x,-bm.y);
    bit.draw(stage, shiftOrigin);

    file.save(jpgEncoder.encode(bit),outputFileName);
}
在Flash播放器上它可以工作。 例如,如果我将“stage”更改为某个movieclip名称,它也会起作用。但我需要拯救所有的舞台,而不仅仅是一部电影

这可能是个bug


有什么办法可以解决吗?

AS3参考文档对flash.net.FileReference说:

FileReference.upload()、FileReference.download()、FileReference.load()和FileReference.save()函数是非阻塞函数。调用这些函数后,在文件传输完成之前返回。此外,如果FileReference对象超出范围,则在该对象上尚未完成的任何事务在离开范围时都将被取消。请确保只要上传、下载、加载或保存继续,FileReference对象仍在范围内

看起来您的FileReference对象立即超出范围,这可能会自动取消您的文件保存。此外,文件规定:

在Flash Player中,您只能在响应用户事件时成功调用此方法(例如,在鼠标单击或按键事件的事件处理程序中)。否则,调用此方法将导致Flash Player引发错误异常


粘贴的代码不会因为MouseeEvent或KeyboardEvent而显示此操作,因此现在还不清楚您是否根据用户操作进行操作。

t确认,但这不是问题。正如我所说。如果我改变这条线位,画(舞台,移位);画(一些电影剪辑,移位);它将movieclip保存到文件中。这个问题只发生在浏览器上。嗯,对不起,选择性阅读又来了。我不知道发生了什么事。该阶段应为IBitmapDrawable。您是否尝试过包装try/catch以查看是否存在运行时错误?问题已解决。我为IE安装了调试器版本,它显示出了问题所在。这是某种安全违规行为,因为我从另一台服务器加载swf。太棒了,很高兴你解决了。@valter你应该回答自己的问题,将其标记为已解决。