Подтвердить что ты не робот

Может ли javascript получить доступ к файловой системе?

Я был уверен, что ответ был НЕТ, и, следовательно, google gears, adobe AIR и т.д.

Если бы я был прав, то как работает http://tiddlywiki.com? Это настойчиво и написано в javascript. Это также просто один HTML файл, который не имеет внешних (серверных) зависимостей. WTF? Где/как он сохраняет свое состояние?

4b9b3361

Ответ 1

В Tiddlywiki есть несколько способов сохранения данных, в зависимости от того, какой браузер используется. Как вы могли видеть в источнике.

  • Если ActiveX включен, он использует Scripting.FileSystemObject.
  • В браузерах на базе Gecko он пытается использовать UniversalXPConnect.
  • Если Java включен, в нем используется апплет TiddlySaver Java.
  • Если Java LiveConnect включен, он пытается использовать классы файлов Java.

Ответ 2

Файл HTML5 [1], FileWriter [2] и FileSystem [3] API доступны на последнем канале разработчика Google Chrome. API FileSystem позволяет читать/записывать в файловую систему sandbox в пространстве, о котором знает браузер. Например, вы не можете открыть папку "Мои рисунки" в локальной локальной сети пользователя и читать/писать. Это что-то в работе, но на некоторое время он не будет готов. Пример записи файла:

window.requestFileSystem(
  TEMPORARY,        // persistent vs. temporary storage
  1024 * 1024,      // 1MB. Size (bytes) of needed space
  initFs,           // success callback
  opt_errorHandler  // opt. error callback, denial of access
);

function initFs(fs) {
  fs.root.getFile('logFile.txt', {create: true}, function(fileEntry) {

    fileEntry.createWriter(function(writer) {  // FileWriter

      writer.onwrite = function(e) {
        console.log('Write completed.');
      };

      writer.onerror = function(e) {
        console.log('Write failed: ' + e.toString());
      };

      var bb = new BlobBuilder();
      bb.append('Lorem ipsum');
      writer.write(bb.getBlob('text/plain'));

    }, errorHandler);
  }
}

Просмотрите HTML5 слайдер слайдов для получения дополнительных фрагментов кода.

Ответ 3

Он использует ссылки на java файлы следующим образом:

drivers.tiddlySaver = {
        name: "tiddlySaver",
        deferredInit: function() {
            if(!document.applets["TiddlySaver"] && !$.browser.mozilla && !$.browser.msie && document.location.toString().substr(0,5) == "file:") {
                $(document.body).append("<applet style='position:absolute;left:-1px' name='TiddlySaver' code='TiddlySaver.class' archive='TiddlySaver.jar' width='1'height='1'></applet>");
            }
        },
        isAvailable: function() {
            return !!document.applets["TiddlySaver"];
        },
        loadFile: function(filePath) {
            var r;
            try {
                if(document.applets["TiddlySaver"]) {
                    r = document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8");
                    return (r === undefined || r === null) ? null : String(r);
                }
            } catch(ex) {
            }
            return null;
        },
        saveFile: function(filePath,content) {
            try {
                if(document.applets["TiddlySaver"])
                    return document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content);
            } catch(ex) {
            }
            return null;
        }
    }

Ответ 4

Технически вы можете сделать

netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite');

в браузере, совместимом с netscape (Firefox, Mozilla, Netscape), и он попросит пользователя * разрешить или запретить доступ к файловой системе, но это не переносится.

* один раз в процессе браузера

Ответ 5

Может ли javascript получить доступ к файловой системе?

Не за пределами области песочницы, упомянутой выше, насколько мне известно. Тем не менее, он может получить доступ к подписанному java-аплету, который имеет вызываемые общедоступные методы, которые могут обращаться ко всем файлам. Я сделал это, и он отлично работает и перекрестный браузер.

Часть подписки несколько задействована и для профессионального использования вам может потребоваться заплатить сертификат подписи кода, который разрешает вашу личность. Получите его из какого-то места, как Verisign. Таким образом, пользователи, по крайней мере, знают, кто пишет апплет (если это помогает). Вы можете подписывать его самостоятельно бесплатно, но один из этих всплывающих подсказок "возможный риск безопасности" произойдет при первом использовании для авторизации пользователем.

Вы могли бы подумать, что такие подписанные апплеты для записи файлов будут существовать уже для загрузки, но я не смог найти никакого поиска. Если бы они это сделали, вы могли бы просто подключить его на своей странице, узнать API и прочь.

Ответ 6

Ответ действительно НЕТ. Java-апплеты и страшные плагины ActiveX обычно используются, если это требуется