Javascript 哪一个更适合文件下载?为什么?

Javascript 哪一个更适合文件下载?为什么?,javascript,google-chrome,Javascript,Google Chrome,我目前在web应用程序中的任务是在用户单击UI上的按钮时下载CSV文件 我能够将数据格式化为CSV格式,这只是一个大字符串。但作为一个JavaScript白痴,我在网上找到了一些代码,展示了如何下载该文件。我找到了几种方法,但选择了一种看起来最直接的方法 这就是它看起来的样子: var pom = document.createElement( 'a' ); pom.setAttribute( 'href', 'data:text/plain;charset=utf-8,' + enco

我目前在web应用程序中的任务是在用户单击UI上的按钮时下载CSV文件

我能够将数据格式化为CSV格式,这只是一个大字符串。但作为一个JavaScript白痴,我在网上找到了一些代码,展示了如何下载该文件。我找到了几种方法,但选择了一种看起来最直接的方法

这就是它看起来的样子:

  var pom = document.createElement( 'a' );
  pom.setAttribute( 'href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(csvFile) );
  pom.setAttribute( 'download', filename );

  if( document.createEvent ) {
    var event = document.createEvent( 'MouseEvents' );
    event.initEvent( 'click', true, true );
    pom.dispatchEvent( event );
  }
  else {
    pom.click();
  }
问题是,我不知道if和else中的代码有什么区别。是的,我可以看到if版本执行鼠标事件版本的单击,else只调用单击函数,但我不知道浏览器为什么会使用其中一个

事情是这样的:我已经在Chrome上尝试了两个版本。。。两种方法都有效。只有if版本可以工作。只有else版本有效。Chrome是我们需要支持的唯一浏览器


我两者都需要吗?如果不支持,哪一个更可取?为什么?

它正在尝试处理不支持createEvent和的浏览器


如果您不需要支持这些浏览器,您可以假设它在那里,然后使用第一个块。

不是反过来吗?如果单击方法不起作用,它似乎正在处理。有没有理由选择createEvent而不是简单地单击另一个是否存在?我想知道@Jared Farrish也是这样。但不管怎样,谢谢你的解释!我认为一行对三行会更好,但出于某种原因,看起来更喜欢较长的版本。就像我说的,两个版本都在Chrome中工作。@JaredFarrish我认为在这种情况下,两个版本都可以工作。分派已创建事件的一件事就是单击,您可以设置单击事件的位置,包括在元素中单击发生的位置。不过,对于这种情况,这并不重要,而且您是对的,您可能希望使用更简单的API,因为两者都可以工作。