htmlの一番最初に以下を貼り付ける
console.log(msg)のラインにブレイクポイントを設定する。
htmlの一番最初に以下を貼り付ける
console.log(msg)のラインにブレイクポイントを設定する。
時間を表す言葉には時刻と時間間隔があるので時間という言葉ではあいまいになる。
どちらの場合も単位と基準点が問題になる。単位は秒とかミリ秒とかのこと、基準はUTCとか日本時間のこと。
UTCで1970/1/1からの秒を表す。今の値はこことかでわかる。
C#でこの値を得るには以下のコード
C#のDateTimeは0001/1/1からの100ナノ秒で管理しているようだ。3つの引数をとるコンストラクタはグレゴリオカレンダーで初期化するのでこれでいいらしい。
javscriptでこの値を得るには以下のコード
javascriptのDateはUTCで1970/1/1からのミリ秒で管理しているようだ。デフォルトのコンストラクタは今でgetTime()はミリ秒でUnix Epoch(=Unix time stamp)を返すので1000で割って秒にしている。
C#の場合は以下のようにやるらしい
これだとローカル時間が帰るので以下のように修正
https://github.com/ambiesoft/blogprogs/tree/master/5705
CORSはクロスサイト間のリソース管理。Javascriptから他のサイトのリソース取得を管理するためのプロトコル。
通常こういったクロスオリジンのアクセスは許されないが(ブラウザが許さない)サーバがあるhttpヘッダを返すことで許すことができる。
このヘッダを付けることで、クライアントはその値と自分のJSのサイトが一致していたら通信を許可する。.htaccessに以下のように記述すると、すべてのクロスオリジンアクセスを許す。
通常は完全にアクセスを許すことはしたくないはずなので自分のサイトだけを登録するが、サイトが複数ある場合はデバッグ中のlocalhostを加えたい場合は面倒なことになる。
更にサイトがディレクトリを掘っていて、ディレクトリごとに.htaccessがある場合とかだっともっと複雑になる。
とりあえず動いているものとして、以下の.htaccess。
これはlocalhostとtango.dip.jpを許可する。返されるヘッダにはアクセス元のサイトのみが返るのだと思われる。
仕様によると以下の記述でもいいらしい。(試していない)
上記の.htaccessにはメソッドの記述もあるが、これは許すメソッドを定義しているものと思われる。そのためにブラウザはOPTIONメソッドでリクエストしてこの情報を得るものと思われる。このときのURLはサイトのURLと同じと思われるので、PHPなどが動くときは200が返るようにしておかないと、Chromeなどはエラーを出す。OPTIONのときはPHPの$_POSTがないと思われるので、このとき500とかを返すとCORSがうまくいかない。
ChromeなどのエラーResponse to preflight request doesn’t pass access control checkはこのOPTIONを指しているものと思われる。
このように非常に面倒で、ヘッダとかを調べるのも面倒なので適当に書いた。ヘッダを確認するにはChromeのDEVTOOLSを使うといい。304になってしまう場合は、シフトキーを押しながらリロードするか、リロードボタンで右クリックして、ハードリロードなどを選ぶ。タイプコラムがxhrになっているのがスクリプトからのアクセス。
nodeでjavascriptを実行する場合、通常はnodeにファイルを渡してスクリプトを実行するが短いスクリプトの場合はコマンドラインにスクリプトを書くことができる。ちょっとしたスクリプトを書きたい場合はこうすることですべての情報がコマンドラインにしか存在しないのでよりポータブルになる。しかしコマンドラインの制約から文字列を囲むクォートやダブルクォートが書きにくいので、その点は注意する必要がある。Windowsではシングルクォートは通常の文字のように扱われるので、スクリプト全体をダブルクォートで囲い、スクリプト内部での文字列はシングルクォートで囲むようにする。
次にスクリプトに引数を渡したいときはnodeに渡す引数と区別するために、通常は最後に–(2つのハイフン)をつけて、それ以降の引数はスクリプトに渡されるものであることを指示する。
上記のことを組み合わせて、スクリプト内で引数を受け取り、コマンドラインでスクリプトとそれに渡す引数を渡すことができる。これを応用してnpm runに記述しておけば、ちょっとしたコマンドをpackage.jsonに登録することができる。jsonでダブルクォートを扱うときはバックスラッシュでエスケープすればいいので矛盾は生じない。
-eでスクリプトをそのまま指定。
–のあとのコマンドライン引数はスクリプトに渡される。
スクリプト内では引数はprocess.argvで受け取る。
npm runはそのまま実行するだけのようなので以下のように書く。ダブルクォートはバックスラッシュでエスケープする。
特殊なhttpレスポンスヘッダがあるとクライアントのjsからドメイン制限を無視して取得できる。apache2で設定する方法。
サーバのjsonを置いたディレクトリに.htaccessを置き、ここに以下の記述を追加する。
(.htaccessが有効になっている必要がある。有効になってない場合はサーバの設定ファイルに直接書くか、有効にする)
Chromeで対象jsonを開き、[Ctrl]+[Shift]+Iでdevコンソールを開き「ネットワーク」タブの「All」を開く。[Ctrl]+Rと表示されたときは押す。
3xxが帰ってきているときは[Shift]を押しながらリロードする。
対象ファイルをクリックするとヘッダが見れる。
node + vscode が前提。ここではjsonの取得にaxiosモジュールを使ってみる。
vscodeのターミナルで以下を実行。
このリンクのhtmlのjavascriptはhttps://jsonplaceholder.typicode.com/postsから取得している。次の例はこのサーバから取得。
.htaccessはすべてのクライアントから許可するように以下のように修正
このリンクが外部のクライアントからアクセスされた時のログは以下
サーバとクライアントとクロスサイトスクリプティングが一緒になって複雑