我知道您不应该在 Javascript 中进行阻塞,而且我从来没有无法重构而不必这样做。但是我遇到了一些我不知道如何处理回调的东西。我正在尝试将 Downloadify 与 html2canvas 一起使用(这仅适用于 IE,下载数据 URI 在 IE 中不起作用)。您必须指定一个数据函数,以便 Flash 对象知道要下载什么。不幸的是,html2canvas 是异步的。我需要能够等到 onrendered 事件被填写后才能获取数据 URI。
$('#snapshot').downloadify({
filename: function(){
return 'timeline.png';
},
data: function(){
var d = null;
html2canvas($('#timeline'),{
onrendered:function(canvas){
d = canvas.toDataURL();
}
});
//need to be able to block until d isn't null
return d;
},
swf: '../static/bin/downloadify.swf',
downloadImage: '../static/img/camera_icon_32.png?rev=1',
width: 32,
height: 32,
transparent: true,
append: false
});
我愿意接受有关其他方法的建议,但我被困住了。
编辑- 一些评论表明需要更多关于 Downloadify 的信息(https://github.com/dcneiner/Downloadify)。Downloadify 是一个 Flash 对象,可用于触发浏览器的另存为窗口。downloadify() 函数只是简单地初始化 Flash 对象并<object/>
在元素中粘贴标签。由于它是一个 Flash 对象,因此您无法从 Javascript 触发事件而不会导致安全违规。
我将它用于 IE 仅用于下载 Canvas 元素的图像。在所有其他浏览器中,我可以只使用数据 URI,但 IE 是一朵特殊的花。