2010/12/20(月)原因は M$社なのに、、、

12/16 頃から IE7/IE8 で文字化けするとの連絡が、、
当初、原因判らず、挙句の果てには、当方が同時期に提供したシステム更新のせいでは?

との話しもあったが、原因は、Windows Update によって、IEでiso-2022-jp (JISコード) な文字コードが判別出来なくなったもの。
参考資料→ [MS10-090] Internet Explorer 用の累積的なセキュリティ更新プログラム

なので、 12/15 以降公開の Windows Update を行い、IE にて iso-2022-jp なサイトを閲覧しようとしたときのみ文字化けが発生するわけです。
弊社サイトは、この条件で見事に文字化けするようになりました、、
Firefox や Chrome では、この問題は起きません。

本来、サーバサイドにて対応すべき問題ではありません。
しかし、IE ユーザ層は自力解決困難なユーザ層が大半なので、完全に無視するわけにもいきません。

結局、兼ねてから予定していた弊社サイトの UTF-8 化を前倒しでやってしまいました。
損害賠償をM$社からもらえるわけではありません。
しかし、損害を被っています。

尖閣諸島近海で、中国籍の漁船が海上保安庁の巡視船に意図的体当たりして明らかな「公務執行妨害」なのに無罪放免され、その様子を撮影した動画を政府の意図に反して公開した公務員が罪に問われるということに 似ています。

ユーザサイドに立てばかなり大きな問題ですが、殆ど騒がれませんでした。
ここからして、思考回路の何かが変だ。

権力か覇権あれば、何やっても許されるんですか。おかしな社会だ。

2010/11/25(木)javascript なクロスフェード表示

表示が切り替わるときに、新旧の内容が交差するような感じでゆっくりと切り替わるようなものを「クロスフェード表示」といいます。
音楽でも曲が入れ替わる時に使う常套手法です。

散々既出ですが、メモ代わりということで、、
提供時期は少し古いですが、最新のIE8,Firefox 3.6,Chrome で動作確認しました。

先ず、クロスフェード Javascript をダウンロード し、Webサーバにアップロード。

次に、対象がある HTML ファイルに以下の一文を <head> - </head> の間に追記。
<script type="text/javascript" src="bsn.Crossfader.js"></script>


次に、実際にクロスフェードさせたい内容を記述。
<span id="disp1">文字列1</span>
<span id="disp2">文字列2</span>
<span id="disp3">文字列3</span>

<div> 要素を使う説明が多いらしいですが、id 属性が付与できる要素であれば、何でもいいようです。
最後に、上記記述を行った直後の位置に、以下のような記述を行います。
<script type="text/javascript">
var cf = new Crossfader( new Array('disp1' , 'disp2' , 'disp3'), 1800, 4500 );
</script>


外部ファイルにしても良いです。
最後の2つの数値はフェードエフェクトの時間と、要素の表示時間の設定です。
この例だと、
* フェードエフェクトの時間 : 1800ms
* 各要素の表示時間 : 4500ms

のようになります。
まぁ、特定の要素だけ長く表示するようなことは、スクリプト改造でもしないと出来ません。あとはお好みで。

2010/10/13(水)SoftBank 3G携帯はある意味デリケート

某携帯サイト制作で、気づいたこと。
UTF-8 いわゆるUnicode で制作する場合に特に注意すべきこと。
<meta content="text/html; charset=utf-8" http-equiv="content-type">
と、最初記述していました。
これだと、シミュレータ上では、きちんと表示されるのに、いざ実機確認すると、文字化けしたり、全く表示されなくなったりするのです。
すなわち、この <meta> タグは無視されます。

ページのコードが Shift_JIS の場合は、特に問題起きません。
保証はしていないようですが、多くの SoftBank 携帯は、ページの文字コードは、デフォルトで Shift_JIS であると決め打ちする挙動のようです。

文字コードを指定する <meta> タグは以下のとおりに記述しないと、正しく認識されないようです。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
パラメータの順番・値はこの通りにしないと駄目です。

このことについて携帯キャリアに質問しても『仕様です』と突っぱねられる(少なくとも Vodafone時代は そんな対応だった)ので、時間の無駄です。

なぜ Unicode で制作しているか。
それは、比較的近い将来に多言語共存環境が予測できる為です。
ということで参考にどーぞ。

2010/04/20(火)Javascript での画像情報取得

久々かと思ったら、また Javascript の話。
    function check_image(uri) {
    imgobj = new Image() ;
    imgobj.src = uri ;
    var iwidth  = imgobj.width ;
    var iheight = imgobj.height ;
    var sparam  = 'width=' + iwidth + ',height=' + iheight + ',toolbar=0,menubar=0,scrollbars=0' ;
    subimg = open(uri, "imgdisp", sparam) ;
  }
上記のように記述したら、子ウィンドウがパラメータ uri で指定する画像のサイズに合わせて開く計算だったのだが、1回目に所定より小さいサイズの子ウィンドウが開き、そのウィンドウを閉じた上でもう一度実行させると、やりたいことが出来るという現象。

uri に指定するのは、画像のURLを指定するようにしていますが、これがフォームでアップロードさせた画像ファイルなせいか、適切な拡張子をつけないせいか、どうにも上手くいきません。

結局、CGI 側にて、アップロードした画像ファイルのサイズを抽出し、上記の Javascript にそのサイズを指定するようにすることで回避しました。こんな感じ。
  function check_image(uri,iwidth,iheight) {
    var sparam  = 'width=' + iwidth + ',height=' + iheight + ',toolbar=0,menubar=0,scrollbars=0' ;
    subimg = open(uri, "imgdisp", sparam) ;
  }

2010/03/19(金)最新版のChrome でJavascriptの不具合?

現象の確認に何時間も填まったのでorz
先ず、提起のJavascript
  function rateing_submit() {
    var formElem = document.getElementById('form1') ;
    formElem.submit() ;

    window.opener.location.reload() ;
    self.close() ;
  }

続いて HTML側
<form name="form1" id="form1" action="/cgi-bin/request.cgi" method="POST">
  <input type="hidden" name="mode"  value="addrate">
  <input type="hidden" name="lisid" value="21">
  評価する曲 :ベートーベン - 第9<br>
  現在の評価 :3.0 (3 人の平均)<br>
  評価をどうぞ :
  <select name="addrate">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3" selected>3</option>
    <option value="4">4</option>
    <option value="5">5</option>
  </select><br>
  <input type="button" name="action" value="評価登録"onClick="javascript:rateing_submit()">
嫌い→気に入った<br>  1・・・・5<br>
</form>
こうすると、Chrome では、Javascript の formElem.submit() が全く機能しません。
サーバにPOSTデータが行かないのです。HTML側で method を GET に変更しても現象は同じ。
これは、Chrome 固有で、手元のFirefox 3.6、IE8 では問題なく機能します。
別の関数などあるのかどうかも調べがつきませんでした。
おそらく、Chrome のJavascript で単純にバグがあるものと考えています。

2010/02/11(木)chrome のHTTP非同期通信・コールバック

ウチでβ版運用中のBCLサーチ。
https://www.basekernel.co.jp/pc/elec/BCLlib.html

上記で検索条件設定の上で検索すると、検索結果が一覧表示され、「詳細表示」の部分をクリックすると、さらに細かい情報が以下のような感じで表示できる仕組みにしてあります。
20100211.png

Firefox だと正しく機能するものの、Chrome だと同じ内容が2回表示される問題があったが、やはり javascript の仕様が違うことによるもの。
要点を以下に示します。
  getdata = new XMLHttpRequest() ;
これは、非同期HTTP通信を行うときのオブジェクト設定。ここは Firefox も Chrome もたぶん同じ。
  getdata.onreadystatechange = function() {
    if (getdata.readyState == 4) { setsdata(rownum,getdata) ; }
  }

  if (navigator.userAgent.indexOf('Firefox') > -1) {
    getdata.onload = function() {
      if (getdata.readyState == 4) { setsdata(rownum,getdata) ; }
    }
  }
ここは、ちょっと注意しなければいけません。
上3行は IE と Chrome では有効ですが、Firefox では上手くいきません。
下の5行は、navigator.appName で、 Netscape とすると、Firefox でも Chrome でも有効になります。
javascript において、navigator.appName は、Firefox でも Chrome でも Netscape を返します。
上記のようにしたところ、Chrome でも表示は正しくできるようになったのですが、他の Gecko エンジン使うブラウザでは、逆に動作に問題起きるかもしれません。