模拟用户事件

时间:2012-08-29 11:17:33

标签: javascript events actionscript flash filereference

我有一个带有文件swf和HTML按钮的网页:当我点击我要保存的按钮(下载到我的磁盘)时,我的swf文件显示的当前图像(它是一种图像库)。

当按钮在我的swf内部时它完全有效,但是当它通过ExternalInterface失败时 - 我从JavaScript调用保存图像的方法。

我验证了JS-AS通信(没关系),我知道FileReference.save()仅在用户事件触发时才有效。 可能点击HTML按钮不被视为用户事件

除了改变任何东西(例如,在服务器端移动一些代码,将图像发送到服务器,然后下载它......),有没有办法模拟用户事件?任何其他解决方案或提示都表示赞赏。

注意:我会使用Flash按钮,但HTML是必需的。

1 个答案:

答案 0 :(得分:0)

解决方案(或不是视情况而定)

基于Flash

目前我认为最好的办法是坚持使用Flash中的按钮。如果您需要从主Flash运行时中取消该按钮,您可以使用两个Flash嵌入来尝试正在执行的操作,并使用LocalConnection在它们之间进行通信。我不建议这样做,因为LocalConnection是一个很好的工作,并且无法保证你不会遇到跨越两个实例的安全沙箱问题。

基于服务器端

您可以实现一个保存系统,该系统涉及将图像数据发送回服务器并形成前端可以请求的实际URL。这将允许您指定下载所需的任何内容。这样做的缺点是它需要一台服务器(因此不适用于离线应用程序),它还需要一定的麻烦,只能以一种方式发送图像数据,以便以后将其拉下来......

我在这里详细介绍了这个:

Canvas Image to an Image file

基于HTML5

目前我不推荐我在评论中建议的数据URL下载,因为它还不是一个完整的解决方案。但是,从好的方面来说,我会密切关注顶级浏览器正在实施的内容,因为答案很快就会改变。

巷道

基本上我只是尝试通过数据URI实现图像下载(认为这将是您最好的解决方案),这一切都可以正常工作,而且您可以非常愉快地从BitmapData对象中获取所需的Base64数据。但是,问题是无法在下载时指定文件名。所以你最终会得到相当难看的文件名,甚至没有正确的扩展名。

<a href="data:image/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC">Click to Download File</a>

在研究了一下之后,似乎没有没有可行的解决方法,但是有一些规范可以帮助实现:

<a download="filename.png" href="data:image/octet-stream;...">Download File</a>

下载属性的设计恰好是我上面提到的问题,并允许命名下载。不幸的是我找不到实现它的浏览器......

参考