Автоматически загружать локальный файл, даже если он был изменен в Firefox - PullRequest
0 голосов
/ 11 февраля 2019

Я ищу решение, которое позволяет браузеру постоянно загружать локальный файл, первоначально выбранный пользователем, даже если этот файл редактируется.У меня есть решение, которое работает в Chrome, но Firefox перестает загружать его после редактирования файла.Этот код вставлен ниже.

function readSingleFile(e) {
  var readers = new Array();
  setInterval(function () {
  var file = e.target.files[0];
  readers.push(new FileReader());
  readers[readers.length-1].onload = function(e) {
    var contents = e.target.result;
    // Display file content
    displayContents(contents);
    console.log(contents);
  };
  readers[readers.length-1].readAsText(file);
}, 5000);
}

function displayContents(contents) {
  var element = document.getElementById('file-content');
  element.innerHTML += contents;
}

document.getElementById('file-input').addEventListener('change', readSingleFile, false);

1 Ответ

0 голосов
/ 11 февраля 2019

Файловые объекты «живы» в Chrome - измените длину файла, и значение fileObject.length изменится при повторном чтении, чтение свойства lastModified файла вернет дату и время самого последнего изменения, а чтение содержимого файла вернетобновленный контент (как указано в посте).

Файловые объекты не живут в Firefox в настоящее время.Значение, возвращаемое чтением fileObject.length, остается неизменным, даже если длина файла изменилась, а чтение свойства файла lastModified возвращает метку времени, когда была создана ссылка на файл.Попытка чтения обновленного файла приводит к тому, что обработчик onerror средства чтения файлов вызывается с «NotReadableError: Файл не может быть прочитан» в качестве аргумента.

Спецификация File API по-прежнему остается редакторомчерновик от 1 февраля 2019 года. В разделе Файловый интерфейс говорится о создании моментального снимка состояния файла на диске (имя, длина и дата последнего изменения):

Если объект File являетсяссылка на последовательность байтов, происходящую из файла на диске, затем ее моментальный снимок должен быть установлен в состояние файла на диске во время создания объекта File.

и сопровождается следующимследующее примечание (выделено мной):

Примечание: это нетривиальное требование для реализации для пользовательских агентов, и поэтому не является обязательным, но обязательным [RFC2119],Пользовательские агенты должны стремиться к тому, чтобы состояние моментального снимка объекта File было установлено в состояние основного хранилища на диске во время получения ссылки.Если файл изменяется на диске после того, как была взята ссылка, состояние моментального снимка файла будет отличаться от состояния основного хранилища.Пользовательские агенты могут использовать метки времени модификации и другие механизмы для поддержания состояния моментального снимка, , но это оставлено как деталь реализации.

Мое чтение этогочто Firefox на данном этапе разработки стандарта не обязан реализовывать поведение Chrome как «совместимое».В то же время я не удивлюсь, если Firefox примет проект предложения когда-нибудь в будущем - или решит не делать этого.

В заключение я скорее сомневаюсь, что является решением Firefox дляВаше требование в это время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...