【问题标题】:How does a javascript download link work?javascript 下载链接如何工作?
【发布时间】:2011-02-01 15:02:33
【问题描述】:

我一直在使用 Microsoft Technet 站点,您可以通过单击页面上的链接来下载 ISO 文件。元素是这样的:

<a href="javascript:void(0)" onmouseout="HideToolTip()"
    onmouseover="ShowToolTip(event,'Click here to download.')"
    onclick="javascript:RunDownload('39010^313^164',event)"
    class="detailsLink">Download</a>

我在脚本中找不到RunDownload() 方法。我想知道它可能会做什么。我的意思是,通常当我为某人提供下载链接时,我会提供一个锚点:

<a href="www.foo.com/mymp3.mp3">download</a>

但这是不同的工作脚本在做什么?因为即使我运行“Fiddler”,我也无法看到实际的下载位置。

【问题讨论】:

  • 这样的事情有很多方法可以工作。
  • 锚点仅在您将其作为文件存储在服务器上并且随后存在可用于直接访问它的路径(例如 www.foo.com/mymp3.mp3 在您的例子)。例如,如果您将文件的二进制内容存储在服务器上的数据库中,则不能这样做,因为不存在这样的路径。
  • “不存在这样的路径”在某些情况下没有意义,例如,如果您有一些 url 重写规则。然后,可供下载的内容不一定是您网络服务器上的物理文件,它可以是一些动态生成的内容(可能来自数据库)。

标签: javascript html download


【解决方案1】:

没有“javascript 下载”链接之类的东西。 Javascript 可以打开一个新窗口,或者模拟点击一个链接。

你要找的是这次点击触发的函数会通向哪个url。

下面是一个例子:

假设我们有一个:

<a id="download">download Here §§§</a>

然后这个 jQuery 代码:

$('#download').click( function() {
    window.location.href = 'http://example.org/download/ISO.ISO';
} );

将重定向到 URL http://example.org/download/ISO.ISO。此 url 是否开始下载取决于 HTTP 标头和您的浏览器,而不是 javascript 的作用。

【讨论】:

    【解决方案2】:

    下载位置可以是 url 重写的路径。这意味着可能一些参数是通过 HTTP Post 给出的,并且 Web 服务器或 Web 应用程序中的一些 HTTP 处理程序可能会从 HTTP 请求中获取一些参数并将文件字节写入 HTTP 响应,这绝对隐藏了文件在实际服务器的文件系统。

    也许这就是幕后的原因,让您无法知道文件的位置。

    例如,我们可以这样: http://mypage.com/downloads/1223893893

    并且您请求了一个像“whatever.exe”这样的可执行文件来将其下载到您的硬盘上。 “http://mypage.com/downloads/whatever.exe”在哪里?实际上,它是不存在的。它是一个字节数组,保存在某个记录的长数据库中,“mypage”Web 应用程序处理对标识为“1223893893”的文件的请求,该文件可以是标识符、日期时间或任何参数的组合。

    【讨论】:

    • @workdreamer 哦,这是一个发明的链接哈哈哈!这只是一个示例链接;)
    • 抱歉这个非常愚蠢和愚蠢的问题,我没有阅读整个评论,我急于找到答案。非常感谢
    【解决方案3】:

    我认为函数 RunDownload 可能做的是它可能会使用 get 请求通知服务器另一个下载即将发生,或者它可能需要通过设置运行下载后台将 target 属性设置为 iframe,因此用户无需打开另一个选项卡并在同一页面上下载文件。

    <a href="file.mp3" onclick="runDownload();">Download</a>
    

    JS

    var runDownload=function(){
        e.preventDefault();
        increaseDownloadCountOnTheServer(location);
        window.location.href="filelocation.exe";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 2017-08-24
      相关资源
      最近更新 更多