有点讨厌的解决方案是target='_blank'
在链接标签上设置。这会在单独的窗口中打开请求,但是一旦请求已注册为下载,该窗口将关闭并将用户留在原始页面上,而新的下载在后台。
这似乎在 Chrome 和 Firefox 上运行良好,但 Safari 在下载过程中会离开新窗口。
另一种解决方案是重新加载 iframe 设置,将其src
属性设置为自身。唯一的问题是用户将失去他们的滚动位置。
我选择了混合解决方案,但确实做了一个巨大的假设,即所有版本的 Chrome 和 Firefox 都表现出相同的行为(下载开始时关闭选项卡)。这可能是不正确的,因此浏览器检测可能应该被改进。
或者,嘿,谷歌可以修复谷歌文档:)
// preserve the google doc in the iframe. else the iframe goes gray when a download link is clicked
if (navigator.userAgent.indexOf('Chrome') != -1 || navigator.userAgent.indexOf('Firefox') != -1){
// Chrome and Firefox open new tabs with target='_blank' but close them again when the download begins
// the page itself is unaffected
$('a.download_link').attr('target', '_blank');
}
else{
// the above doesn't work on Safari and probably others so fall back to reloading the iframe contents
$('a.download_link').live('click', function(){
$('iframe').each(function(id, frame){
frame.src = frame.src;
});
});
}