Можно ли загрузить файл с помощью JS/HTML5 FileReader на необслуживаемой странице?

Я хочу создать простую игру в HTML5/JS, и я не хочу, чтобы пользователь запускал какой-либо веб-сервер или подключался к веб-сайту. (просто HTML-страница)

Но похоже, что FileReader можно использовать только для файлов.

Возможно ли иметь только два файла: index.html и foo.txt рядом и читать foo.txt из index.html с чем-то вроде:

// No input needed, I know waht I want to read
var my_file = new File("foo.txt");
var reader = new FileReader();
alert( reader.readAstext( my_file, "UTF-8" ) );

Есть идеи ?


person MARTIN Damien    schedule 27.02.2012    source источник
comment
FileReader и File не являются встроенными функциями JavaScript. Существуют одноименные классы Java. Вы взаимодействуете с апплетом или чем-то еще, что обеспечивает мост к JVM?   -  person Mike Samuel    schedule 28.02.2012
comment
Я не понимаю, как файлы относятся к вашей игре HTML5/JS. Чего вы надеетесь достичь, прочитав файл, и на какой машине этот файл расположен?   -  person Mike Samuel    schedule 28.02.2012
comment
@MikeSamuel FileReader и File являются частью javascript, начиная с HTML5: developer.mozilla.org/en/DOM/ FileReader   -  person MARTIN Damien    schedule 28.02.2012
comment
@MikeSamuel Я хочу написать игру, работающую в веб-браузере (без сервера, только файлы). И я хочу, чтобы мой основной скрипт мог читать файлы с JSON внутри для динамической загрузки карт или персонажей, например (как вы будете делать с бинарной игрой)   -  person MARTIN Damien    schedule 28.02.2012
comment
Я не знал этого. Спасибо.   -  person Mike Samuel    schedule 28.02.2012


Ответы (3)


Я считаю, что это ваш ответ: Как открыть файл на локальном диске с помощью Javascript?

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

<input type="file" id="files" name="file" />

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

Только представьте, что произойдет, если разработчики (или, лучше сказать, хакеры) получат доступ ко всем локальным данным...

person DRAX    schedule 27.02.2012
comment
Это то, чего я боялся... Итак, я полагаю, что таким образом невозможно сделать сложную игру (с большим количеством динамических ресурсов)... Мне придется разместить игру на веб-сервере и создать запросы на содержание. - person MARTIN Damien; 28.02.2012
comment
Да, сервер нужен для таких вещей. Другим вариантом может быть создание веб-сайта на локальном сервере, а затем преобразование его в файл .exe с помощью какого-либо из перечисленных программ (я еще не уверен, что он совместим с HTML5): google.com/ - person DRAX; 28.02.2012

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

Один из способов создать данные удобным для сопровождения способом, а затем передать их в JavaScript, который я использую, — это написать простой скрипт, который берет набор файлов контента и анализирует контент в формате JSON в большом старом файле data.js. Затем его можно включить и вести себя точно так же, как обычные объекты Javascript. Конечно, можно было бы использовать JSON для хранения данных, но это гораздо более многословно, чем что-то вроде простого CSV, если у вас много данных для вашего приложения.

person glenatron    schedule 22.03.2013

У меня есть чит-код на этот случай.

Я назвал свой файл JSON как .js: jsonfile.js, который содержит мои данные json в виде строковой переменной:

var jsondata = '{ "foo" : "bar" }';

В моем index.html я включаю его перед своим .js с кодом:

<html> 
<head> 
<script type="text/javascript" src="mydata/jsonfile.js"></script>
<script type="text/javascript" src="js/mycode.js"></script>

Затем я могу получить свои данные как объект JSON в mycode.js следующим образом:

var data = JSON.parse(jsondata);
alert(data.foo);
person Julien Feniou    schedule 14.12.2017