可以在JavaScript下载之前执行功能吗?

时间:2018-03-01 15:53:07

标签: javascript html

基本上我有一个要下载的文件。

<a href="path_to_file" download="proposed_file_name">Download</a>

我想在下载开始之前执行几个命令,有没有方法可以做到这一点?

我查看了手册中的标签,没有像onclick或before_click这样的选项。

2 个答案:

答案 0 :(得分:1)

https://www.w3schools.com/jsref/event_preventdefault.asp

.preventDefault()将是一个很好的起点。您可以阻止链接执行其默认行为,注入您想要的任何内容,然后再触发下载。

答案 1 :(得分:1)

  

我查看了手册中的标签,没有像onclick或before_click这样的选项。

当然a元素有click个事件;占据页面空间的所有元素都可以。

在执行链接的默认操作之前,将同步运行单击处理程序。因此,在下载开始之前您需要完成的任何工作都可以在单击处理程序中完成:

document.querySelector("...selector for the link...").addEventListener("click", function() {
    // Do your stuff here
});

如果您需要做的事情包括异步处理,那么您需要阻止默认操作并且(尝试)稍后再次触发该操作:

var triggering = false;
document.querySelector("...selector for the link...").addEventListener("click", function(e) {
    if (triggering) {
        return;
    }
    e.preventDefault();
    var link = this;
    startTheAsyncProcess(function() {
        // Async callback: Do your stuff here...
        // ...then try to trigger its action
        triggering = true;
        link.click();
        triggering = false;
    });
});

根据您的异步工作,您可能会或可能无法触发下载;浏览器可能会认为它没有被用户操作启动并阻止它。