(function () { Rakka.canAccessLocalFile = function () { return $.browser.mozilla; }; var loadBin_mozilla = function (localFile) { /* localFile: nsILocalFile */ try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read local file was denied. " + "Open about:config and check that " + "signed.applets.codebase_principal_support is set to true."); } var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance( Components.interfaces.nsIFileInputStream); stream.init(localFile, 0x01, 00004, null); var bstream = Components.classes["@mozilla.org/network/buffered-input-stream;1"].getService(); bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream); bstream.init(stream, 1000); bstream.QueryInterface(Components.interfaces.nsIInputStream); var binary = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance( Components.interfaces.nsIBinaryInputStream); binary.setInputStream(stream); return binary.readBytes(binary.available()); }; var selectFile_mozilla = function (title, mode) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to select local file was denied. " + "Open about:config and check that " + "signed.applets.codebase_principal_support is set to true."); } var nsIFilePicker = Components.interfaces.nsIFilePicker; var modeID; if (mode == "open") { modeID = nsIFilePicker.modeOpen; } else if (mode == "save") { modeID = nsIFilePicker.modeSave; } else if (mode == "getFolder") { modeID = nsIFilePicker.modeGetFolder; } else if (mode == "modeOpenMultiple") { modeID = nsIFilePicker.modeOpenMultiple; } else { throw new Error("Unknown file picker mode: " + mode); } var picker = Components .classes["@mozilla.org/filepicker;1"] .createInstance(nsIFilePicker); picker.init(window, title, modeID); picker.appendFilters(nsIFilePicker.filterAll); var ret = picker.show(); if (ret == nsIFilePicker.returnOK || ret == nsIFilePicker.returnReplace) { return picker.file; } else { return null; } }; Rakka.selectFile = function (title, mode) { if ($.browser.mozilla) { return selectFile_mozilla(title, mode); } else { throw new Error("It's not possible to select local files using JavaScript with your browser. Consider using Firefox."); } }; Rakka.loadLocalBinaryFile = function (file) { if ($.browser.mozilla) { return loadBin_mozilla(file); } else { throw new Error("It's not possible to load local files using JavaScript with your browser. Consider using Firefox."); } }; })();