Вы можете писать файлы на JavaScript в Firefox, но вы должны использовать объект XPCOM (API внутреннего браузера).Это не разрешено для JavaScript, загруженного с веб-страницы, и предназначено для использования JavaScript, работающим внутри надстройки Firefox (с высоким уровнем привилегий).
Существует способ для непривилегированных (вебстраница) JavaScript для запроса дополнительных привилегий и, если пользователь предоставит их (появится всплывающее диалоговое окно с запросом разрешения), код веб-страницы сможет записать в файл.
Но прежде чем читать дальше, предупреждение:
Это не стандартный JavaScript, и я бы не рекомендовал этот подход, если вы не разрабатываете очень конкретное приложение, которое будет использоваться очень специфическим образом (например, * 1008).* клиентская вики (только HTML-вики).
Запрашивать привилегии XPCOM на веб-сайте - плохая практика!Это в основном эквивалентно запуску .exe, который вы только что загрузили с сайта.Вы просите пользователя предоставить полный доступ к своему компьютеру (чтение, запись, выполнение) с идентификатором пользователя, на котором запущен Firefox.
Запросить разрешение на использование XPCOM (это будет запрашивать подтверждение у пользователя, никоим образомчтобы избежать этого):
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
Затем запишите в файл, используя объект XPCOM (пример кода из Mozilla Developer Network):
1. // file is nsIFile, data is a string
2. var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].
3. createInstance(Components.interfaces.nsIFileOutputStream);
4.
5. // use 0x02 | 0x10 to open file for appending.
6. foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
7. // write, create, truncate
8. // In a c file operation, we have no need to set file mode with or operation,
9. // directly using "r" or "w" usually.
10.
11. // if you are sure there will never ever be any non-ascii text in data you can
12. // also call foStream.writeData directly
13. var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
14. createInstance(Components.interfaces.nsIConverterOutputStream);
15. converter.init(foStream, "UTF-8", 0, 0);
16. converter.writeString(data);
17. converter.close(); // this closes foStream
Вы можете найти больше информации о I /O в Firefox с использованием XPCOM здесь: https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O