2010-06-18 1 views
8

Я хочу написать функцию в javascript, которая создает файл и записывает в него некоторый контент, iam, работающий с firefox, может кто-нибудь мне помочь в этом случае.Как создать файл с помощью javascript в Mozilla Firefox

Благодаря ...

+1

Почему в downvote? –

+0

Я ответил на вопрос, рассматривая его как создание файла на стороне клиента, так же, как это делает TiddlyWiki. Некоторые люди уволили вопрос, поскольку они интерпретируют, что вы спрашиваете, может ли JavaScript создавать файлы на стороне сервера. Может быть, вам следует уточнить. – flpmor

ответ

2

записи в файловую систему непосредственно из браузера запрещено по соображениям безопасности. Вместе с html5 можно будет иметь автономную поддержку хранилища. Take a look here.

Grz, Kris.

3

Javascript с веб-сайтов не может получить доступ к локальной файловой системе.

Если вы хотите хранить данные либо хранить их на сервере, либо в файле cookie.

+1

Или на клиенте в веб-хранилище https://developer.mozilla.org/en/dom/storage –

0

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

Например, если вы хотите создать файл на своем веб-сайте с помощью javascript, вы можете сделать это с помощью языка сценариев на стороне сервера и вызова AJAX.

Пример:

У вас есть файл на сервере под названием update_last_access.php, который будет создавать файл, который хранит в последний раз файл был доступ в некотором произвольном файле.

Если затем была ваша Javascript функция сделать AJAX взывать к этому сценарию, например, в JQuery

$.get("update_last_access.php") 

Тогда это выполнить бы скрипт сервера и запись в файл.

Прежде чем вам поможет дополнительная помощь, вам нужно будет уточнить, что вы пытаетесь сделать.

0

Вы можете читать файлы из файловой системы в JavaScript с Firefox 3.6 - например, см. Мой EPUB reader proof of concept.

Вы не можете писать файлы непосредственно из JavaScript. Вы должны пройти через сервер.

4

Вы можете писать файлы в JavaScript в Firefox, но вы должны использовать объект XPCOM (API внутреннего браузера). Это недопустимо для JavaScript, загружаемого с веб-страницы, и предполагается, что он будет использоваться JavaScript, работающим внутри дополнения Firefox (с высоким уровнем привилегий).

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

Но прежде чем читать дальше, предупреждение:

Это не стандартный JavaScript, и я бы не рекомендовал этот подход, если вы не разрабатываете очень конкретное приложение, которое будет использоваться в очень специфическим образом (например, для пример, http://www.tiddlywiki.com/ клиентская JavaScript-HTML только wiki).

Запросить привилегии 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

Смежные вопросы