使用 Greasemonkey 保存文件

发布于 2024-09-03 17:48:26 字数 182 浏览 1 评论 0原文

我有一些屏幕抓取的表格数据,我想将其导出到 CSV 文件(目前我只是将其放在剪贴板中),有什么办法可以在 Greasemonkey 中执行此操作吗?关于在哪里寻找有关此类功能的示例或一些文档有什么建议吗?

需要明确的是,我不想写入本地文件系统(我知道这在沙箱中是不可能的),而是提供一个可下载的文件 - 这也可能是不可能的......

I have some screen scraped tabular data that I want to export to a CSV file (currently I am just placing it in the clipboard), is there anyway to do this in Greasemonkey? Any suggestions on where to look for a sample or some documentation on this kind of functionality?

Just to be clear, I don't want to write to the local file system (I know that is impossible in the sandbox), but present a downloadable file - which may also be impossible...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

む无字情书 2024-09-10 17:48:26
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();

演示

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

原来是傀儡 2024-09-10 17:48:26

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

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

更多信息:


这就是我的做法(还有很多其他方法可以做到这一点):

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

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

  • 联系人=JSON.parse(sessionStorage.contacts)
  • sessionStorage.contacts=JSON.stringify(contacts);

我稍微修改了原始脚本,使其适用于多种 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;
  };

希望有帮助。

Yes you can do it using BLOB.

The script will attach content to a link that when clicked will offer to download a file (a file that never existed).

More info on:


This is how I did it (there are many other ways to do it):

  1. GM (greasemonkey) script generates the content of the file
  2. GM passes it to the web page using sessionStorage.variable="...content.."
  3. script within page makes link visible and attach the content of the variable to the BLOB object.

You many need to stringify / parse the object.

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

I modified slightly the original script to make it generic for multiple mime types.

Here is mine.

// 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;
  };

Hope it helps.

莫多说 2024-09-10 17:48:26

也许您无法将其写入本地 CSV,但您可以将其写入 Google 电子表格

Maybe you can't write it to a local CSV, but you might be able to write it to say a Google Spreadsheet?

鹿港小镇 2024-09-10 17:48:26

另一种方法可能是,如果你为每个 cvs 行触发一个 javascript 控制的 http 请求,你必须向一个能够存储的本地 http 服务器小程序(简单的 cgi 或 apache/php 可以轻松做到这一点)

alternative approach could be if you fire a javascript controlled http request for each cvs line you have to a local http server applet that is capable of storing (simple cgi or apache/php could do it easy)

提赋 2024-09-10 17:48:26

免费的 Javascript 实用程序 JSZip 使用 blob 方法生成一个弹出的 Zip 文件供您下载。用户脚本 Fitocracy Bulk CSV 使用 JSZip 收集其生成的 100 个锻炼数据文件。

The free Javascript utility JSZip uses the blob approach to generate a Zip file that pops up for you to download. The user script Fitocracy Bulk CSV used JSZip to collect the 100 files of workout data it generated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文