【问题标题】:Detect if link is a download in javascript/jQuery检测链接是否是 javascript/jQuery 中的下载
【发布时间】:2016-09-19 21:32:48
【问题描述】:

我正在开发一个 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 加载页面,还是我需要专门识别所有下载链接(使用特殊类等)?

【问题讨论】:

  • 你在用download Attribute吗?
  • 暂时没有,但我可能会这样做,而不是使用“下载”类等。一般来说,我不知道内容类型是什么。
  • 坦率地说,Preveen 已经提供了下降的答案,但如果你想处理download 属性,事情会更容易操作..
  • 我完全同意,不幸的是,我与一个团队合作,我可以保证不会想回去并将download 属性添加到所有下载链接。

标签: javascript php jquery download cross-browser


【解决方案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 字节序列返回。

【讨论】:

  • 这种方法需要提交两个请求,对吗?最好只找到 download 属性并将其添加到所有下载链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2012-12-09
  • 2013-06-10
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多