flex FileReference 保存功能触发取消事件与 google-chrome 版本 47.0.2526.106 m 上的 xml 文件

Posted

技术标签:

【中文标题】flex FileReference 保存功能触发取消事件与 google-chrome 版本 47.0.2526.106 m 上的 xml 文件【英文标题】:flex FileReference save function trigger cancel event with xml file on google-chrome version 47.0.2526.106 m 【发布时间】:2016-04-18 06:04:37 【问题描述】:

我一直在尝试使用 flex FileReference 保存功能保存 xml 文件,但这会触发取消事件,而不是在 google-chrome 版本 47.0.2526.106 m 上显示浏览器另存为带有 xml 文件的对话框。我们可以使用其他扩展名保存文件,但不能使用 .xml 扩展名。我们也可以使用以前版本的 google chrome 和其他浏览器保存 xml 文件。看来,这是 chrome 中的错误,或者我可能需要更新我的代码?

这是我尝试过的非常简单的示例,它也不适用于 chrome V 47.0.2526.106。

var personnel:XML = <employees>
<employee id='1187' lastName='Davis' firstName='Charles'>
    <office>CT</office>
    <dept>Marketing</dept>
</employee>
<employee id='3383' lastName='Jones' firstName='Kevin'>
    <office>NY</office>
    <dept>Sales</dept>
</employee>
<employee id='2946' lastName='Samuels' firstName='Elizabeth'>
    <office>CT</office>
    <dept>Engineering</dept>
</employee>
</employees>

// new node appended
personnel.appendChild( <employee id='4002' lastName='Suzuki' firstName='Kenji'>
                        <office>MA</office>
                        <dept>Sales</dept>
                    </employee> );


// convert xml to binary data
var ba:ByteArray = new ByteArray( );
ba.writeUTFBytes( personnel );

// save to disk
var fr:FileReference = new FileReference( );
fr.save( ba, 'filename.xml' );

请注意,如果我将 filename.xml 更改为任何其他扩展名,例如 filename.html 将起作用。

【问题讨论】:

【参考方案1】:

从 Chrome 版本 48.0.2564.82 开始,从 Flash 保存扩展名为 .xml 或 .zip 的文件再次起作用。

正如 Chromium 开发人员所解释的那样,".zip was unblocked intentionally... you should anticipate that, unfortunately, these may need to be blocked again"。似乎没有被视为“危险”的文件扩展名列表。

【讨论】:

【参考方案2】:

已确认,在最新的 Chrome(至少 47.0.2526.106 和 47.0.2526.111)上,使用 FileReference 从 Flash 保存文件可以根据文件扩展名选择性地工作。

根据 Chromium 开发人员的this post,它是“按预期工作”,并且出于某种原因 .xml 被视为“危险(可执行)文件类型”。

建议的解决方法是使用 javascript 下载文件或使用不同的文件扩展名。

此行为也由 Chrome 高级设置中的“保护您和您的设备免受危险网站”选项控制。

【讨论】:

谢谢,是的,我也刚刚删除了 .xml 扩展名,因此用户可以在另存为弹出窗口中手动添加扩展名。

以上是关于flex FileReference 保存功能触发取消事件与 google-chrome 版本 47.0.2526.106 m 上的 xml 文件的主要内容,如果未能解决你的问题,请参考以下文章

Flex的FileReference类中没有save()方法

crossdomain.xml 和 FileReference.upload 的 Flex 问题

Flex 的 FileReference.save() 只能在用户事件处理程序中调用——我该如何解决这个问题?

ASP.NET Web API,从 Flex FileReference 上传时 MIME 多部分流意外结束

上传图像然后共享而不使用 sharedObject 或任何东西将文件保存在 Flex 上?

Flex 4 文件参考选定的图像文件尺寸(宽度和高度)