2017-06-15 58 views
0

当用户点击某个按钮时,我有一个来自后端的url。该网址包含一个文件。当点击url时,该文件应该被下载。我试着做的是通过动态生成锚标记并以编程方式使用MouseEvent单击它。这是我写的代码如下:如何在javascript中点击动态生成的URL?

const link = document.createElement('a'), 
     event = new MouseEvent('click'); 

link.href = data; 
link.dispatchEvent(event); 

但这重定向我的网址,而不是下载它。令人惊讶的是,前几天,这段代码工作正常。什么是最好的方式来做到这一点。

  1. 这应该是独立于浏览器
  2. 我不能使用jQuery的,我写这篇文章的反应,并希望把它写在JavaScript。

[编辑]: ,如果这个问题是重复或错误地问,请评论。我找不到这个具体问题,大部分答案都使用jquery。

+0

link.download = TRUE;你也可以在这个文件中添加一个serverside头文件来强制它的下载...... –

+0

因为你提到这个代码以前是有效的,它可能会改变的一件事就是来自服务器的响应。没有返回文件作为附件 – derloopkat

+0

@derloopkat,早些时候浏览器允许我从新标签打开文件(或下载),如果我粘贴到我的浏览器选项卡上,但现在它不允许我打开,可能是文件是受保护的或者是某种东西,但是我在某处看到我们可以下载这些文件 –

回答

0

尝试用下面的代码

var url = data; 
var element = document.createElement('a'); 
element.href = url; 
element.setAttribute('download', name); 
element.setAttribute('target', '_blank'); 
document.body.appendChild(element); //Append the element to work in firefox 
element.click(); 
+0

我点击后需要删除儿童吗? –

+0

我使用了这个解决方案,并且React在控制台中给了我这个警告:警告:这个综合事件被重用用于性能方面的原因。如果你看到这个,你正在释放/无效的合成事件中访问属性'clientY'。这被设置为空。如果您必须保留原始合成事件,请使用event.persist()。 我知道关于事件的池,但我真的没有得到它为什么在click()事件中给我这个警告 –

相关问题