我正在尝试找到一种方法,我们可以使用JS在Firefox中自动保存文件。我在Windows桌面上使用FireShot的方式:
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);
但问题是它会打开一个对话框来确认本地驱动器位置详细信息。有没有办法我可以硬编码本地驱动器存储位置并自动保存文件?
答案 0 :(得分:1)
如果您要创建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
会自动关闭两个流,您不需要这样做。但是,您可能希望将函数作为第三个参数传递给此方法 - 它将在写入操作完成时调用。
答案 1 :(得分:0)
每台计算机都有不同的文件结构。但是,仍有一种方法。您可以将其保存到cookie /会话,具体取决于您的数据的“永久”状态。
不要考虑编写物理文件,因为它需要额外的许可。