その他

非プログラマでも、簡単にローカル環境でAjax通信を可能にする方法

2020年2月17日

Ajax通信に限らず、Web Storage や Canvas などもですが、
ほとんどのWebブラウザでは、ローカルのファイルへのAjax通信を許可していません。

回避方法としては、

  • Chrome起動時にオプションをつけたり、
  • 拡張機能を使って簡易Webサーバを立てたり、
  • ローカルにWebサーバーをインストールしたり、

など、様々ありますが、、

どれもPCやブラウザの環境に依存するものばかりで、
非プログラマへ手順を教えるのでさえ、ひと苦労... 😂
※ 非プログラマ: 基本的にはプログラマー以外の方(デザイナーやお客さんなど)を意味します。

(そのくらいやれよ!ってのは、今回はナシで笑笑)
もっと良い方法あります!!!!!

GO言語を使う

GO言語だと、たった数行のコードでWebサーバが立てられる
という記事を目にし、本記事の方法を思いつきました。

なぜなら、GO言語はコンパイラ型言語のため、
各環境用に実行ファイルを予め用意しておくことができるのです。
使い方は、実行ファイルをダブルクリックするだけ!

管理者権限なども必要ありません。

GO言語のインストール方法

※ 今回は省略します。

実際のソース

細かい説明は省略しますが、
実行ファイルと同じ階層に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程度なら問題ないと踏んでいますが、動かない関数とかあるのかな...?
(知ってる人いたら教えてください)

-その他
-

Copyright© teckmemo , 2020 All Rights Reserved.