Чтение локального файла с помощью JavaScript HTML5 file api (автономный веб-сайт)

Я работаю над веб-сайтом, который будет упакован в файл .exe. Таким образом, сайт будет использоваться только в автономном режиме. Теперь мне нужно разобрать локальный XML-документ. Как я могу получить дескриптор файла для локального файла, используя html5 file api?

РЕДАКТИРОВАТЬ: я не хочу использовать <input...> или перетаскивать файл в браузер.


person user1324258    schedule 15.08.2013    source источник
comment
немного поздно, но я думаю, что electrojs - это путь.   -  person Sylvain Reverdy    schedule 24.06.2019


Ответы (3)


Боюсь, я могу принести плохие новости для вашего дизайна: действие, которое вы запрашиваете, явно нарушает модель безопасности, указанную в спецификации File API. Клиентская реализация FileReader() должна убедиться, что «все файлы, считываемые объектами FileReader, были предварительно выбраны пользователем». (W3C File API, 13. Вопросы безопасности: http://www.w3.org/TR/FileAPI/#security-discussion).

Было бы огромным риском для безопасности, если бы скрипты браузера могли просто произвольно открывать и читать любой файл по пути без какого-либо взаимодействия с пользователем. Ни один производитель браузеров не разрешит такой беспрепятственный доступ ко всей файловой системе.

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

person Phil Nicholas    schedule 25.08.2013

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

Это сказало...

<html>
  <head>
    <script>
      function foo(){
        //insert desired filereading script here.
      }
      document.getElementById("fileFoo").click();
    </script>
  </head>
  <body>
     <input type="file" id="fileFoo" display="hidden" value="filepath.extension" onclick="foo"/>
  </body>
</html>

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

person Algorath    schedule 16.11.2013
comment
Не уверен, что вы пытаетесь сказать здесь. Вызов .click() просто откроет диалоговое окно выбора файла, так как невозможно передать какую-либо информацию о значениях в поля ввода файла. - person sp00n; 07.04.2014

Я испытываю ту же проблему в эти дни. Мне нужно, чтобы веб-сайт отображал некоторые данные каждый раз, когда я запускаю веб-страницу. Данные должны автоматически адаптироваться к каждому запуску, поэтому я не думаю, что ссылка @Augusto может решить ваш вопрос.

Попробовав разные способы (включая написание временного локального файла XLM или JSON), я наконец убедил себя, что, возможно, «замена» «данных» в html-файле может быть самым простым способом.

У меня есть html-шаблон, внутри которого есть строка типа [data]. Каждый раз при запуске веб-страницы [данные] будут заменены реальными данными, такими как [1,2,3]. Так что на самом деле запускается новый файл.

Вы можете перейти к введите здесь описание ссылки, чтобы увидеть, как выполняется "замена". Удачи.

person ehfaafzv    schedule 03.12.2015