【问题标题】:Clicking a download link in Safari causes all target=_blank links to download when clicked, is there a workaround?单击 Safari 中的下载链接会导致单击时下载所有 target=_blank 链接,是否有解决方法?
【发布时间】:2018-06-29 05:17:34
【问题描述】:

问题: 单击下载内容的链接后,所有其他具有 target="_blank" 且没有下载属性的链接在单击时下载而不是在新标签中打开。

浏览器: Safari 11.0.2

<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>

  <body>
    <h3>Instructions</h3>
    <ul>
      <li>Click <a href='sample.txt' target='_blank'>ME</a> (download NOT present) to see page load in new tab then come back to this page</li>
      <li>Click <a href='sample.txt' download='sample.txt'>ME</a> (download PRESENT) to see it downloaded</li>
      <li>Click <a href='sample.txt' target='_blank'>ME</a> (download NOT present).  Safari forces this link to download</li>
    </ul>
  </body>

</html>

代码示例: https://embed.plnkr.co/IscC6LTTmpEbAMLrxyYJ/

复制:

  1. 点击带有下载属性的链接
  2. 下载后点击同一页面上的 target="_blank" 链接,会看到它被强制下载,而不是在新标签页中打开。

更新: 我更新了这个问题,希望能更好地解释正在发生的事情。我找到了一种解决方法,但是如果我将链接更改为 _self 而不是 _blank,那么它们在下载后会正常工作。

【问题讨论】:

  • 虽然这方面的赏金可以防止关闭或标记投票,但我认为这篇文章不符合 SO 问题指南。不清楚在问什么,我不确定这个问题是否属于这个网站
  • 我认为这可能是一个“激进的”缓存问题(可能是缓存 HTTP 响应标头)。但我没有 Safari 可供测试。您是否尝试为每个href 提供一个查询参数来排除这种情况?例如href='sample.txt?newtab' 和href='sample.txt?download'。如果两个 URL 有不同的查询字符串,服务器会忽略查询字符串,但浏览器会认为它们是不同的资源并分别缓存。

标签: html hyperlink download safari


【解决方案1】:

不是真正的答案,但在向苹果报告问题并等待之后,我们现在有了 Safari 11.1.1,它似乎已经解决了这个问题,所以标记为已解决。

【讨论】:

    【解决方案2】:

    关于您上面提到的问题,您有两种选择来下载文件:

    在同一窗口中打开文件:

    <a href="sample.txt" target="_self">Click to Download</a>
    

    在新窗口中打开文件:

    <a href="sample.txt" target="_blank">Click to Download</a>
    

    强制文件下载窗口:
    但是,如果你想强制文件下载,通过提示下载弹出框(打开或保存),然后所有您需要做的是将“下载”添加到链接中,如下所示:

    <a href="sample.txt" download>Click to Download</a>
    

    因此,您编辑的代码可能如下所示:

    <!DOCTYPE html>
    <html>
    
      <head>
        <link rel="stylesheet" href="style.css">
        <script src="script.js"></script>
      </head>
    
      <body>
        <h3>Instructions</h3>
        <ul>
          <li>Click <a href='sample.txt' target='_blank'>ME</a> (download NOT present) to see page load in new tab then come back to this page</li>
          <li>Click <a href='sample.txt' download='sample.txt'>ME</a> (download PRESENT) to see it downloaded</li>
          <li>Click <a href='sample.txt' download>ME</a> (download NOT present).  Safari forces this link to download</li>
        </ul>
      </body>
    
    </html>
    

    希望对您有所帮助!

    【讨论】:

    • 我同意新标签必须在很短的时间内打开并消失。
    • Safari 是在浏览器中原生呈现文本文档,还是总是强制下载它们?试试这个链接,例如:ietf.org/rfc/rfc1123.txt(在 Chrome 中加载)
    • -1:我认为你没有仔细阅读这个问题。问题是“为什么非下载链接会导致浏览器在使用下载链接后下载”。该问题已经证明了此答案中包含的知识。这个问题是 Safari 特有的。
    • 不幸的是,这不是我想要的。我已经知道如何下载东西了。问题是,当您有一个下载链接时,之后您不想下载的其他链接(所以没有下载 attr)无论如何都会下载,而不是在新标签中打开
    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多