检测链接是否是javascript / jQuery中的下载

时间:2016-05-23 06:05:30

标签: javascript php jquery download cross-browser

我正在开发一个PHP应用程序,可能需要几秒钟来加载下一页。为了防止用户在下一页加载时点击垃圾邮件(并让他们知道页面正在加载),我实现了一个覆盖页面的页面加载微调器:

// Assume all internal links start with "http://www.example.com"
$('a[href*="http://www.example.com"]').on("click", function () {
  var href = $(this).attr("href");
  if (!href || href[0] === "#") {
    location.hash = href;// set that hash
    return;
  } else {
    location = href;
    $(".loading-spinner").fadeIn(100, function () {
        setTimeout(function(){ $(".loading-spinner").fadeOut(200); }, 10000); // 10 second loading maximum
    });
  }
  return false;
});

如果链接开始下载文件,我想在检测到下载后立即淡出.loading-spinner

有没有办法检测链接是否触发下载而不是使用javascript / jQuery加载页面,还是需要专门识别所有下载链接(使用特殊类等)?

1 个答案:

答案 0 :(得分:1)

向URL发送一个AJAX请求,并使用getResponseHeader函数获取内容类型:

$.get(url, function (response, status, xhr) {
  if (xhr.getResponseHeader("content-type").indexOf("text") > -1)
    // Text based stuff.
  else
    // Download based stuff. (eg., application/pdf, etc.)
});

更多信息:

  

XMLHttpRequest.getResponseHeader() 方法返回包含指定标题文本的字符串,如果尚未收到响应或标题不存在,则返回null在回应中。如果有多个具有相同名称的响应头,则它们的值将作为单个连接字符串返回,其中每个值通过一对逗号和空格与前一个值分隔。 getResponseHeader()方法将值作为UTF字节序列返回。