電子国土APIを,カモランドに本格導入し始めた.

まだ半分程度の場所しかプロットできていないが,それは頑張ればできることなので構わない.問題は,そこに書いているとおり「IEの場合,ページをリロードまたはブラウザバックで戻ってきたときに,JavaScriptエラーが発生します」ということ.IE6でもIE7でも起きる.

これは発生するパターンとしないパターンを色々比較した結果,ページのエンコーディングがShift_JISではなくEUC-JPなのが関係していると思われる.それを裏付ける以下のような情報もあった.

それで,どうすれば良いのかは,不明.APIのJavaScriptをEUC-JPに変換したものをカモランド内にキャッシュしてそれを読ませるようにしてもみたが,すると別の場所でエラーが出る有り様.

...JavaScriptが悪いのか,電子国土が悪いのか,俺の性格が悪いのかはわからんが,生産性が悪すぎる.この現象だけで,サラリーマンにとっての貴重な日曜日が,半日以上潰れたという現実.

電子国土に深入りするのはやめた方が良いのかも知れない.(;´Д`)

...その後,APIのJavaScriptをEUC-JPに変換したものをカモランド内にキャッシュして,それを使うという方法で何とかうまくいったので書いておく.

(1)JavaScriptのEUC-JP化
まず,cyberjapanから取得したJavaScriptをEUC-JPにコード変換したものを,キャッシュとしてカモランド内の以下の場所に置いておく.

(2)EUC-JP化したJavaScriptをロード
そして,ページからiframeで読み込むmap_obj.htmを,以下のように変更する.
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
  <script language="Javascript" src="http://kamoland.com/js/cache/cyberjapan.jp/webtis.js" charset="EUC-JP"></script>
  <script language="Javascript">createWebtisObject();</script>
</head>
</html>

(3) わーい ヽ(´▽`)ノ
これでIEでのリロードやブラウザバックでもエラーが起きない状態で,EUC-JPのページで電子国土を動かせるようになった.

なお,キャッシュ作成処理は,以下のようなスクリプトで行った.

#!/bin/bash
LANG=C
WGETLOG=wget.stat
FNAME=webtis.js
wget -N -S -o $WGETLOG http://cyberjapan.jp/$FNAME
if grep saved $WGETLOG; then
  cat $FNAME|iconv -f sjis -t euc-jp| \
  sed -e 's/http:\/\/cyberjapan.jp\/webtis_limited\.js/http:\/\/kamoland.com\/js\/cache\/cyberjapan.jp\/webtis_limited.js/'| \
  sed -e 's/Shift_JIS/EUC-JP/' \
  > ../$FNAME
fi

FNAME=webtis_limited.js
wget -N -S -o $WGETLOG http://cyberjapan.jp/$FNAME
if grep saved $WGETLOG; then
  cat $FNAME|iconv -f sjis -t euc-jp > ../$FNAME
fi

要は,こんな事をやっている.

  1. wgetでcyberjapan.jpからJavaScriptを取得する
  2. 取得したJavaScriptを,iconvでShift_JISからEUC-JPにコード変換
  3. webtis.jsの中身のうち,インクルードしているJavaScript(webtis_limited.js)のURLの箇所を,カモランドキャッシュのURLに変更する
  4. webtis.jsの中身のうち,charsetを指定している文字列の箇所を「Shift_JIS」→「EUC-JP」に置換する

こいつをcronで毎晩実行するようにした.

あへぇ〜,疲れた.

→この内容は,電子国土APIの豆知識にまとめています


© 2024 KMIソフトウェア