「書き込みできません」って?

2007/05/25 | JavaScript/Ajax

「AJAXを使ってデータをPOSTし、非同期通信して、結果を返してinnerHTMLで表示」というルーチンを考え、実際そのようなプログラムを書いてみた。
テストをする段階になって、いろんなサーバで試してみたのだが、うまくいくときといかない場合がある。なぜなぜ???。
エラーが出るときはIEで「書き込みできません」というメッセージが出る。これはどうも外部ホストと通信しようとした際に表示されるエラーらしい。つまり、読み込み元のHTMLがおいてあるホストと異なるホストへ通信しようとするとエラーが生じることがわかった(セキュリティ上の理由で)。
つまりHTMLファイルのURLホスト名と、呼び出すJavaScriptの配置してあるホスト名が違うとエラーが出るのだ。むやみに外部のホストにAJAXでデータを送信させない、ということだ。
ちなみにこの問題は回避できない。まったく違う代替案を探る必要がある。

ラジオボタンの値の取得

2007/05/24 | JavaScript/Ajax

毎回悩むところなのだが、JavaScriptでラジオボタン(type=”radio”)の値の取得方法がわからなかった。基本的にシングルアンサーなのだから、プルダウン(type=”select”)と同じと思って、selectedIndexとか使ったけど全然だめだめ。調べてみたら一発で取得できないことがわかった。
以下取得するためのJavaScript。

function radioValue(obj){
  var i;
  for(i=0;i<obj.length;i++){
    if(obj[i].checked){
      return obj[i].value;
    }
  }
  return ”;
}

上記関数を書いて、取得したいラジオボタンをオブジェクトとして引数で与える。
JavaScript、きっと永遠に好きになれない。

呼出元の文字コードとJavaScript出力の文字コード

2007/05/23 | JavaScript/Ajax

例えばGoogle Adsense。不特定多数にJavaScriptのタグを渡して、それぞれ各自のウェブページにそのタグを貼ってもらうとき、当然貼られる先のウェブページの文字コードはさまざまだ。貼ってもらうJavaScriptで文字を出力するのだが、例えば以下の組み合わせのような場合、
 ウェブページ:Shift_JIS
 JavaScript:UTF-8
特別なことをしないと文字化けして表示される。これを回避するために例えば以下のようなことを考えた。
 ○JavaScriptが貼られているウェブページのURLをJavaScriptで取得
 ○取得したURLのHTMLを丸ごと取得して、文字コード判別
 ○プログラムで判別した文字コードに変換してJavaScriptから出力
しかし、これ、貼られた先のウェブページが表示されてから、JavaScriptの出力が完了するまで少なからず時間がかかることは言うまでもない。

そこでいいことを思いついた(思い出した)。AJAXな仕組みを作るときは基本的に文字コードはUTF-8で作ることが多いが、違う文字コードのウェブページでそういうJavaScriptを使いたいときがある。こういう場合の対処法でJavaScriptを呼び出す際の記述で以下のようにするとうまくいくことがある、と書いてあった。

<script type="text/javascript" src="http://example.com/script.js" charset="UTF-8">

JavaScriptを呼び出す際に「charset属性を指定してやる」というもの。この手法で見事簡単に異なる文字コード間でも正しく出力できることを確認できた(IE、Opera、FireFoxで確認)。
あまりに簡単に面倒なルーチンを回避できたのでちょっとうれしくなった。

ちょっとしたデバッグ

2007/05/22 | Smarty

Smartyにはデバッグコンソール機能がついていて、あらかじめ設定しておくだけで、どのような変数にどのような値が格納されているかポップアップでだしてくれる。これはこれでとても便利。
しかしわざわざ設定を書き換えたりする必要があるので面倒だ。URLのQueryString中に、一時的に「SMARTY_DEBUG」の文字列を加えるとコンソールが出るとのことだが、意外とそれも面倒。
で、今日たまたま思いついた。テンプレート内の変数に修飾子を以下のようにつけてみた。

{$variable|var_dump}

テンプレート内で思うような処理ができなくって困っていたりするわけだから、テンプレートファイルを編集するだけで、ささっ、と変数の中身を調べたいとかねてから思っていた。ちょっと思いつきでやってみただけだったけど、ちゃんとvar_dumpしてくれた。

すっきり。
ほんの少しだけ手間が減った。

とうとう始めるXOOPS

2007/05/21 | XOOPS

クライアントさんの関係でとうとうXOOPSを始めることになった。
とうとう、というのは語弊があって、実は以前XOOPSを使っていた。バージョン2の頃だから、ちょうどCMSがもてはやされ始めた頃・・・と思ったら今だにバージョンは2のままか。数年間メジャーバージョンアップしてないわけですな。
しかし派生バージョン「XOOPS CUBE」ができている。数年前は「日本語独自バージョンを開発するのはどうこう」と議論になっていたが、結局やる方向で落ち着いたということか。
情報をあさってみると、XOOPSで日本人のコミットが拒否されたとか・・・。元々日本人がメイン開発者の一人だったのに、ひどい話だ。しかしそれにもまして新プロジェクト「XOOPS CUBE」では広く(国籍を問わず)開発者を募集している。きっと大変徳の高い方がやっていらっしゃるのだろう(と思ったらXOOPS CUBEの管理者の名前がtadashi・・・これは長尾さんだったかな)。なんとも徳が高い話だ。オープンソースの鏡、というべき?。
ということでXOOPSの取り扱いを始めます。記事投稿は逐次・・・。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net