Автосохранение файла в Firefox
Я пытаюсь найти способ, с помощью которого мы можем автоматически сохранять файл в Firefox, используя JS. Как я делал до сих пор, используя FireShot на рабочем столе Windows:
var element = content.document.createElement("FireShotDataElement");
element.setAttribute("Entire", EntirePage);
element.setAttribute("Action", Action);
element.setAttribute("Key", Key);
element.setAttribute("BASE64Content", "");
element.setAttribute("Data", Data);
element.setAttribute("Document", content.document);
if (typeof(CapturedFrameId) != "undefined")
element.setAttribute("CapturedFrameId", CapturedFrameId);
content.document.documentElement.appendChild(element);
var evt = content.document.createEvent("Events");
evt.initEvent("capturePageEvt", true, false);
element.dispatchEvent(evt);
Но проблема в том, что он открывает диалоговое окно для подтверждения сведений о расположении локального диска. Есть ли способ, которым я могу жестко запрограммировать локальное хранилище на диске и автоматически сохранить файл?
2 ответа
Если вы создаете надстройку Firefox, то FileUtils и NetUtil.asyncCopy ваши друзья:
Components.utils.import("resource://gre/modules/FileUtils.jsm");
Components.utils.import("resource://gre/modules/NetUtil.jsm");
var TEST_DATA = "this is a test string";
var source = Components.classes["@mozilla.org/io/string-input-stream;1"].
createInstance(Components.interfaces.nsIStringInputStream);
source.setData(TEST_DATA, TEST_DATA.length);
var file = new FileUtils.File("c:\\foo\\bar.txt");
var sink = file.openSafeFileOutputStream(file, FileUtils.MODE_WRONLY |
FileUtils.MODE_CREATE);
NetUtil.asyncCopy(source, sink);
Это будет асинхронно писать строку this is a test string
в файл c:\foo\bar.txt
, Обратите внимание, что NetUtil.asyncCopy
закрывает оба потока автоматически, вам не нужно это делать. Однако вы можете захотеть передать функцию в качестве третьего параметра этому методу - она будет вызвана после завершения операции записи.
Смотрите также: фрагменты кода, запись в файл
Каждый компьютер имеет свою файловую структуру. Но все же есть способ. Вы можете сохранить его в файле cookie / сессии, в зависимости от того, насколько "постоянными" будут ваши данные.
Не рассматривайте возможность записи физического файла, так как для этого требуется дополнительное разрешение.