もう2015年だから別にいけるんじゃね?出したいのはクライアントサイドで表示してるデータだし。と思ったけど、
- 例によって古いIE (9以下かな) でめんどくさい
- SafariだとHTMLAnchorElementのdownload attributeが無効 (http://caniuse.com/#feat=download) で、"unknown" ってファイル名になったりする
- 文字コード周りがめんどくさい
…といった事情があるため、msSaveBlobやらcreateObjectURLと戯れるのは諦めて、おとなしくサーバサイドで生成してContent-Dispositionつけて返しましょう。
「俺ならクロスブラウザな実装が出来る!やってやる!」と思ったそこのアナタ。それは、この場合においては無用な努力です。