打开下载链接的最佳做法(而不是document.location)?

时间:2012-01-25 23:07:26

标签: javascript html web download

我有一个我知道通常打开UA将下载的文件的网址(带有content-disposition: attachment标题),但有时只会导致500或其他错误页面。

目前,我通过在JavaScript中设置document.location来触发下载。

我不想为此打开新的标签页或页面,但我也不希望我的用户最终只能在500页的情况下结束。

是否有解决我问题的方法?

例如,创建一个以下载网址为来源的不可见<iframe>?我不想发明新的东西,但如果有人知道一个经过验证的解决方案,我很好奇。

1 个答案:

答案 0 :(得分:0)

您可以在使用HTTP HEAD请求发送用户之前检查URL是否存在

function CheckFileExists(url)
{
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open('HEAD', url, false);
  xmlhttp.send();

  //You may have to invert this to return true if not 500 || 404, this is up to you
  if(xmlhttp.status == 200)
  {
    return true;
  }
  else
  {
    alert('Sorry, that file does not exist');
    return false;

  }
}

您的超链接可以像这样写成

<a href="http://example.com/myfile.pdf" onclick="return CheckFileExists(this.href);">Download this file</a>

此方法的缺点是在点击和下载开始之间发生延迟。

如果您仍然要通过JavaScript重定向用户,可以根据CheckFileExists返回的值重定向。