В Firefox записать в файл с помощью Javascript? - PullRequest
6 голосов
/ 26 ноября 2010

Ситуация: - Я создал установку установки (локальную), которая возвращает URL, например: - ved.test.com, который сопоставлен с IP 11.22.33.44. Таким образом, чтобы сделать веб-приложение доступным после установки, пользователь должен явно сделать запись в файле hosts в каталоге «C: \ WINNT \ system32 \ drivers \ etc».

Подход: - После завершения установки приложения приложение записывает файл с использованием Javascript.

Проблема: - Написание файла с использованием Javascript поддерживается в IE. Мне нужно решение для Firefox . Используемый код: -

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Write To A File</title>
<script language="javascript">
    function WriteToFile()
    {
    /* The below statement is supported in IE only */
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var s = fso.CreateTextFile("C:\\Test.txt", true);
    s.WriteLine('IE Supports Me!');
    s.Close();
    }
</script>
</head>
    <body onLoad="WriteToFile()">
</body>
</html>

Также ссылались на ссылку в SO: - Как читать и записывать в файл, используя JavaScript

Пожалуйста, предоставьте решение, которое поддерживает запись файла с использованием Javascript, который запускается в браузере Firefox .

Заранее спасибо.

Ответы [ 4 ]

14 голосов
/ 26 ноября 2010

Вы не можете сделать это по понятным причинам безопасности. У JavaScript нет доступа к файловой системе ... в IE это не JavaScript, но ActiveX делает это ... он просто имеет доступ к JavaScript API.

Проблема не в том, что Firefox этого не делает ... в том, что IE когда-либо разрешал это:)

3 голосов
/ 26 ноября 2010

Вам нужно создать собственное расширение Firefox , потому что чтение / запись локальных файлов считается привилегированной операцией.

Чтение / запись файлов с использованием XPCOM: https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O. Это не будет работать с вашей веб-страницы, но только из привилегированного кода, такого как расширения.

1 голос
/ 04 декабря 2012

Хотя Firefox не позволяет вам жестко программировать по определенному пути, вы можете заставить его представить диалоговое окно пользователю, который может сохранить его по пути вручную, хотя им также потребуется изменить тип файла (поэтому Я знаю, что это не очень практично): https://stackoverflow.com/a/13696029/271577. В этом же посте также показано, как открыть содержимое файла на новой вкладке, где пользователь может использовать функции сохранения браузера для ручного сохранения файла (преимущество этого подхода заключается в том, что расширение файла может быть .txt по умолчанию (и это в некоторых обстоятельствах может быть полезен тем, что дает пользователю предварительный просмотр содержимого)).

Кстати, хотя в Firefox был собственный способ разрешения HTML получать привилегии с разрешения пользователя, теперь enablePrivilege , я работаю над дополнением под названием AsYouWish , которая позволяет пользователю запрашивать привилегированный доступ (например, запись в файл на рабочем столе) для каждого сайта, и, хотя я надеюсь, что в конечном итоге он может перейти в Firefox (требуется белый список), в настоящее время он требует установки надстройка (и она все еще находится в альфа / бета-версии, с некоторыми вещами, которые нужно доработать или проработать, и что наиболее важно, обеспечивает соблюдение требования использовать https, чтобы избежать атак «человек посередине»). В настоящее время он использует API, который, я думаю, потенциально может работать с другими браузерами в будущем, он информирует пользователя о том, какие именно привилегии запрашиваются, и не требует от разработчиков писать новое дополнение каждый раз, когда они хотят, чтобы его запрос сайта привилегированного доступа от пользователя.

1 голос
/ 03 февраля 2012

См. https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O для получения информации об этом в Firefox.

Это выглядит примерно так:

var file = Components.classes["@mozilla.org/file/local;1"].
       createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("/home");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...