7

快速(希望是简单的)问题:我需要触发下载由 PHP 文件生成的 PDF 文件。我可以做这个:

<a href="download.php">Download</a>

但我应该以另一种方式这样做吗?也许是Javascript?以上工作,但窗口显示“正在加载...”,直到下载开始。我想向用户提供一些正在发生的事情的反馈。

想法?

注意:我已经有了从服务器发送文件的代码。它完美地工作。这个问题只是关于如何最好地从客户端调用该脚本。

一些网站的下载会自动启动。他们是怎么做到的?

直接 URL 的问题在于,如果 PHP 脚本出错,它将替换现有页面的内容,这不是我想要的。

4

4 回答 4

13

编辑

是的 javascript,类似于:

<a href="download.php" onclick="this.innerHTML='Downloading..'; downloadPdf(this);">Download</a>

如果您需要真正了解何时开始下载,您可能需要调用 iframe,然后在其上使用“onload”事件。例如:

// javascript
function downloadPdf(el) {
    var iframe = document.createElement("iframe");
    iframe.src = "download.php";
    iframe.onload = function() {
        // iframe has finished loading, download has started
        el.innerHTML = "Download";
    }
    iframe.style.display = "none";
    document.body.appendChild(iframe);
}
于 2009-01-15T05:45:29.420 回答
3

您下载的解决方案很好。您可能需要考虑向用户提供一些视觉反馈,也许通过使用 javascript 在通过 onclick 处理程序单击链接时在当前页面上显示“正在下载,请等待消息”。或者只是在链接旁边表明下载可能需要一些时间才能开始。由于 IE 将卸载页面,停止任何 GIF 动画,我更喜欢文件下载的文本指示。

于 2009-01-15T05:47:04.517 回答
2

通过使用 onclick 事件处理程序来伪造它以显示旋转的 gif

<a href="download.php" onclick="ShowDownloading();">Download</a>
于 2009-01-15T05:42:05.853 回答
2

自动开始下载通常在普通页面中使用元标记:

<META HTTP-EQUIV="REFRESH" CONTENT="10.0;URL=download.php">

此示例将在 10 秒内将浏览器重定向到 download.php。

于 2009-01-15T08:19:36.723 回答