Exportar dados de javascript para o arquivo CSV sem interação com o servidor

Se estivéssemos em um servidor nodeJS, poderíamos escrever um cabeçalho, definir um tipo MIME e enviá-lo:

res.header("Content-Disposition", "attachment;filename="+name+".csv"); 
res.type("text/csv");
res.send(200, csvString);

e por causa dos cabeçalhos, o navegador criará um download para o arquivo csv nomeado.

Quando dados úteis são gerados em um navegador, uma solução para obtê-lo em um arquivo CSV é usar ajax, carregá-lo no servidor (talvez, opcionalmente, salvá-lo lá) e fazer com que o servidor o envie de volta com esses cabeçalhos para se tornar um csv baixar de volta no navegador.

No entanto, eu gostaria de uma solução de navegador 100% que não envolve pingue-pongue com o servidor.

Então me ocorreu que alguém poderia abrir uma nova janela e tentar definir o cabeçalho com um equivalente de tag META.

Mas isso não funciona para mim no Chrome recente.

Eu recebo uma nova janela e contém o csvString, mas não funciona como um download.

Eu acho que esperava obter um download em uma guia inferior ou uma nova janela em branco com um download em uma guia inferior.

Eu estou querendo saber se as meta tags estão corretas ou se outras tags também são necessárias.

Existe uma maneira de fazer este trabalho sem puncioná-lo para o servidor?

JsFiddle para criação de um arquivo CSV no navegador (não funciona - exibe a janela, mas não faz download)

var A = [['n','sqrt(n)']];  // initialize array of rows with header row as 1st item
for(var j=1;j<10;++j){ A.push([j, Math.sqrt(j)]) }
var csvRows = [];
for(var i=0,l=A.length; i<l; ++i){
    csvRows.push(A[i].join(','));   // unquoted CSV row
}
var csvString = csvRows.join("\n");
console.log(csvString);
var csvWin = window.open("","","");
csvWin.document.write('<meta name="content-type" content="text/csv">');
csvWin.document.write('<meta name="content-disposition" content="attachment;  filename=data.csv">  ');
csvWin.document.write(csvString);

questionAnswers(6)

yourAnswerToTheQuestion