使用Greasemonkey保存文件

时间:2010-06-01 15:42:11

标签: javascript greasemonkey

我有一些屏幕抓取的表格数据,我想导出到CSV文件(目前我只是将它放在剪贴板中),无论如何在Greasemonkey中执行此操作?有关在何处查找样本或有关此类功能的文档的任何建议?

为了清楚起见,我不想写入本地文件系统(我知道在沙盒中是不可能的),但是提供一个可下载的文件 - 这也许是不可能的......

6 个答案:

答案 0 :(得分:7)

是的,你可以使用BLOB。

该脚本会将内容附加到链接上,该链接在单击时将提供下载文件(从不存在的文件)。

更多信息:

我就是这样做的(还有很多其他方法):

  1. GM(greasemonkey)脚本生成文件的内容
  2. GM使用sessionStorage.variable =“... content ..”
  3. 将其传递到网页 页面中的
  4. 脚本使链接可见,并将变量的内容附加到BLOB对象。
  5. 您需要对对象进行字符串化/解析。

    • contacts = JSON.parse(sessionStorage.contacts)
    • sessionStorage.contacts = JSON.stringify(触点);

    我稍微修改了原始脚本,使其适用于多种mime类型。

    这是我的。

    // Stuff to create the BLOB object   --- ANY TYPE ---
    var textFile = null,
    //-- Function
    makeTextFile = function (text,textType) {
        // textType can be  'text/html'  'text/vcard' 'text/txt'  ...
        var data = new Blob([text], {type: textType });
        // If we are replacing a previously generated file we need to
        // manually revoke the object URL to avoid memory leaks.
        if (textFile !== null) {
          window.URL.revokeObjectURL(textFile);
        }
        textFile = window.URL.createObjectURL(data);
        return textFile;
      };
    

    希望它有所帮助。

答案 1 :(得分:7)

var data='col1,col2\nval1,val2';
var a = document.createElement('a');
a.href = 'data:application/csv;charset=utf-8,' + encodeURIComponent(data);
//supported by chrome 14+ and firefox 20+
a.download = 'data.csv';
//needed for firefox
document.getElementsByTagName('body')[0].appendChild(a);
//supported by chrome 20+ and firefox 5+
a.click();

DEMO

答案 2 :(得分:1)

也许您无法将其写入本地CSV,但您可以将其写为Google Spreadsheet

答案 3 :(得分:1)

替代方法可能是,如果您为每个cvs行发出一个javascript控制的http请求,那么你需要一个能够存储的本地http服务器applet(简单的cgi或apache / php可以轻松实现)

答案 4 :(得分:0)

答案 5 :(得分:0)

我不知道它是如何工作的,但免费实用工具JSZip似乎能够生成一个弹出供您下载的Zip文件。用户脚本Fitocracy Bulk CSV使用JSZip收集它生成的100个锻炼数据文件。