Сохранить файл с помощью Greasemonkey - PullRequest
11 голосов
/ 01 июня 2010

У меня есть некоторые очищенные от экрана табличные данные, которые я хочу экспортировать в файл CSV (в настоящее время я просто помещаю их в буфер обмена), есть ли способ сделать это в Greasemonkey? Любые предложения о том, где искать образец или некоторую документацию по этому виду функциональности?

Просто чтобы прояснить, я не хочу писать в локальную файловую систему (я знаю, что это невозможно в песочнице), но представляю загружаемый файл - что также может быть невозможно ...

Ответы [ 6 ]

8 голосов
/ 08 декабря 2015
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

8 голосов
/ 29 ноября 2015

Да, вы можете сделать это с помощью BLOB.

Сценарий прикрепит содержимое к ссылке, которая при нажатии предложит загрузить файл (файл, который никогда не существовал).

Подробнее о:


Вот как я это сделал (есть много других способов сделать это):

  1. Сценарий GM (greasemonkey) генерирует содержимое файла
  2. GM передает его на веб-страницу, используя sessionStorage.variable = "... content .."
  3. на странице делает ссылку видимой и присоединяет содержимое переменной к объекту BLOB.

Вам нужно много строк / разобрать объект.

  • contacts = JSON.parse (sessionStorage.contacts)
  • sessionStorage.contacts = JSON.stringify (контакты);

Я немного изменил оригинальный скрипт, чтобы сделать его универсальным для нескольких типов пантомимы.

Вот мой.

// 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 голос
/ 07 февраля 2012

альтернативный подход может быть, если вы запускаете управляемый javascript http-запрос для каждой имеющейся у вас строки cvs к локальному http-серверу, который способен хранить (простой cgi или apache / php может сделать это легко)

1 голос
/ 01 июня 2010

Возможно, вы не можете записать его в локальный CSV, но вы можете написать его, например, Таблица Google ?

0 голосов
/ 21 июля 2014

Понятия не имею, как это работает, но бесплатная утилита JSZip , кажется, способна сгенерировать Zip-файл, который всплывает для загрузки. Пользовательский скрипт Fitocracy Bulk CSV использовал JSZip для сбора 100 файлов сгенерированных им данных о тренировках.

0 голосов
/ 01 июня 2010
...