Ajax通信に限らず、Web Storage や Canvas などもですが、
ほとんどのWebブラウザでは、ローカルのファイルへのAjax通信を許可していません。
回避方法としては、
- Chrome起動時にオプションをつけたり、
- 拡張機能を使って簡易Webサーバを立てたり、
- ローカルにWebサーバーをインストールしたり、
など、様々ありますが、、
どれもPCやブラウザの環境に依存するものばかりで、
非プログラマへ手順を教えるのでさえ、ひと苦労... 😂
※ 非プログラマ: 基本的にはプログラマー以外の方(デザイナーやお客さんなど)を意味します。
(そのくらいやれよ!ってのは、今回はナシで笑笑)
もっと良い方法あります!!!!!
GO言語を使う
GO言語だと、たった数行のコードでWebサーバが立てられる
という記事を目にし、本記事の方法を思いつきました。
なぜなら、GO言語はコンパイラ型言語のため、
各環境用に実行ファイルを予め用意しておくことができるのです。
使い方は、実行ファイルをダブルクリックするだけ!
管理者権限なども必要ありません。
GO言語のインストール方法
※ 今回は省略します。
続きを見る
https://golang.org/doc/install
実際のソース
細かい説明は省略しますが、
実行ファイルと同じ階層にsrc
ディレクトリを配置し、そこにhtmlファイルなどソースを格納します。
そうすることで、8080ポートでブラウザが起動するようになっています。
参考にしたサイトなどでは以下のように書いているものもあったのですが、http.Handle("/", http.FileServer(http.Dir("src")))
これだと、実行ファイルを移動した際にうまくディレクトリを指定できていなかったようなので、若干調整しています。
package main
import (
"fmt"
"log"
"os"
"os/exec"
"runtime"
"path/filepath"
"net/http"
)
func openbrowser(url string) {
var err error
switch runtime.GOOS {
case "linux":
err = exec.Command("xdg-open", url).Start()
case "windows":
err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start()
case "darwin":
err = exec.Command("open", url).Start()
default:
err = fmt.Errorf("unsupported platform")
}
if err != nil {
log.Fatal(err)
}
}
func main() {
exe, err := os.Executable()
if err != nil {
log.Fatal(err)
}
http.Handle("/", http.FileServer(http.Dir(filepath.Join(filepath.Dir(exe), "src"))))
openbrowser("http://localhost:8080/")
http.ListenAndServe(":8080", nil)
}
コンパイルの方法
MacとWindowsだけなら、基本これだけで良いです。
GOOS=darwin GOARCH=amd64 go build main.go
GOOS=windows GOARCH=amd64 go build main.go
が、一気に全環境分書き出せるツールもあります。
まとめ
あくまで簡易サーバーなので、サーバー側言語はもちろん動きません。
JavaScript程度なら問題ないと踏んでいますが、動かない関数とかあるのかな...?
(知ってる人いたら教えてください)