Loading local files with Javascript without a web server

Solution 1:

If you insist on using Chrome, it have some command line flags to allow access to/from local originated files (--allow-file-access-from-files / --disable-web-security). Do note that you need to run entire browser from scratch with those flags - i.e. if there's already any other Chrome windows open flags WON'T have any effect and that effect persists across ALL windows until Chrome is closed, which is, obviously huge hole in security.

You can set up a lightweight local server if you pack your "application" with some kind of automated setup script. This is still not very good, because you'd need to install executable that user might not want or even be completely unable to install due to restrictions.

You can pack your HTML/JS-based app as Chrome extension - extensions have much wider permissions than random code, but then you'd need to either distribute it through Google Play or provide instructions to manually install extensions for your users.

And finally, you can format all the data, including your configuration and text files your mentioned as valid JavaScript code - i.e. pack a story1.txt to story1.js like:

var myapp.story1 = "Complete text of story1.txt"

and then just dynamically select stuff you need from corresponding vars or even use DOM manipulation to only load scripts you need through dynamically adding <script> tags. In my opinion that would be best option because it is less intrusive: it doesn't requires any installation/reconfiguration, it just works out-of-box.

Solution 2:

If you just need a quick and easy "legal" web server to trick your browser into thinking that it isn't pulling from the local file system, just use Python's simple HTPP server. It simply serves up files on request from whatever directory it was invoked from. The server is otherwise dumb. It will not execute PHP scripts or anything. Here's how:

  1. Install Python 2.7 on your development machine. This is the only thing that this fix will permanently install.
  2. Open up your command line / terminal window.
  3. Switch to the directory where your scripts reside.

cd /Users/codemonkey/myCoolNewApp (e.g. on a Mac)

  1. Run the following:

    python -m SimpleHTTPServer 80

On a Mac or Linux box, you may need to use sudo:

sudo python -m SimpleHTTPServer 80

  1. Open up your browser and type in:

http://localhost/myapp.html (substitute "myapp.html" with your script name)

  1. And the people rejoice.
  2. To stop the web server, go back to the terminal window in which it is running and hit Ctrl-C. Or shut the computer down. This server will need to be restarted using step 4 each time you want to run it.

You can get really fancy and run multiple instances on different ports, but that's beyond the scope of this quick fix.

Solution 3:

You have to put your local files on the same server. If you are running on local server you have to install some webserver as Apache to get access to your "remote" location.

Every Modern browser stops this, because you mustn't read local files from ANY USER. Even if you are running from localhost.