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 多部分流意外结束