问题 使用Greasemonkey保存文件


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

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


2400
2018-06-01 15:42


起源



答案:


也许你不能把它写到本地CSV,但你可以写它来说a Google电子表格


1
2018-06-01 17:25



有趣的想法。我肯定会研究这个问题,但可能需要做更多的工作,而不是我愿意做的事情,也许更快地制作一个实际的Firefox附加组件来获取对文件系统的访问权限。 - Kris Erickson


答案:


也许你不能把它写到本地CSV,但你可以写它来说a Google电子表格


1
2018-06-01 17:25



有趣的想法。我肯定会研究这个问题,但可能需要做更多的工作,而不是我愿意做的事情,也许更快地制作一个实际的Firefox附加组件来获取对文件系统的访问权限。 - Kris Erickson


是的,你可以使用BLOB来做到这一点。

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

更多信息:


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

  1. GM(greasemonkey)脚本生成文件的内容
  2. GM使用sessionStorage.variable =“... content ..”将其传递到网页
  3. 页面中的脚本使链接可见,并将变量的内容附加到BLOB对象。

您需要对对象进行字符串化/解析。

  • 触点= 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;
  };

希望能帮助到你。


5
2017-11-29 17:12





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


4
2017-12-08 05:43





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


1
2018-02-06 21:18





不幸的是不是 http://wiki.greasespot.net/FAQ#Can_Greasemonkey_be_used_to_open_local_files.3F


0
2018-06-01 15:47



我不想写一个本地文件,更像是创建一个要下载的新文件。 - Kris Erickson


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


0
2017-07-21 16:27