個別UA対応
実は、遠い将来のi-mode対応というやつを狙っています。
ブラウザなどのユーザーエージェント(以下UAと略します)の種別やバージョンにより、対応しているHTMLのタグが異なっているとか、同一のタグなのに表示が異なる、ということがあります。ならば、UAを判別し、同じような表示になるように、あるいは、たとえ表示が崩れても内容がわかるように、タグを切り換えてやればよいのではないか、というのが出発点です。
まず、スクリプト全体から表示に影響を与えそうなタグを探します。見栄えに関して改造していたりすると、ここはオリジナルと大幅に異なるかもしれません。次に、wf_init.cgiの中で、それらを変数に代入します。
私のところではこんな感じになっています。
#---------------------------------------
# ■設定完了
#---------------------------------------
$hr90 = "<hr style=\"width: 90%\">";
$div_center = "<div style=\"text-align: center;\">";
$div_right = "<div style=\"text-align: right;\">";
$td_nowrap = "<td style=\"white-space: nowrap; text-align: left;\">";
$td_right_nowrap = "<td style=\"white-space: nowrap; text-align: right;\">";
$newmark = '<span style="color:#00c000">new!</span>';
$font_subcol1 = "<span style=\"color: $sub_color;\">";
$font_subcol2 = "</span>";
$font_nocol1 = "<span style=\"color: $no_color;\">";
$font_nocol2 = "</span>";
$strong_sub1 = "<strong style=\"color: $sub_color;\">";
$strong_sub2 = "</strong>";
$topnotice = "<table class=\"tblcenter\" summary=\"注記\">";
$newlist = "<table class=\"tblcenter\" summary=\"新着順\">";
$obi1 = "<h1 class=\"obi\">";
$obi2 = "</h1>";
$reftag1 = "<q style=\"color: $refcol;\">";
$reftag2 = "<\/q>";
$msgbgc = "<td style=\"background-color: $tbl_color;\">";
$threadlist = "<table class=\"tblcenter\" cellpadding=3 summary=\"スレッド\">";
|
その直後に、特定のUAであれば別のタグにするような条件文を入れています。
if($ENV{'HTTP_USER_AGENT'} =~ /^DoCoMo/){
$agenta = '1';
$imode = '1';
}elsif($ENV{'HTTP_X_JPHONE_MSNAME'}){
$agenta = '2';
$imode = '0';
} else {
$agenta = '3';
$imode = '0';
if(($ENV{'HTTP_USER_AGENT'} =~ /^Mozilla.4... .ja./){
$toshiki_only = '1';
$hr90 = "<hr width='90%'>";
$div_center = "<div align=\"center\">";
$div_right = "<div align=\"right\">";
$td_nowrap = "<td nowrap>";
$td_right_nowrap = "<td align=right nowrap>";
$newmark = '<font color="#00c000">new!</font>';
$font_subcol1 = "<font color=\"$sub_color\">";
$font_subcol2 = "</font>";
$font_nocol1 = "<font color=\"$no_color\">";
$font_nocol2 = "</font>";
$strong_sub1 = "<font color=\"$sub_color\"><strong>";
$strong_sub2 = "</strong></font>";
$topnotice = "<table align=center summary=\"注記\">";
$newlist = "<table align=center summary=\"新着順\">";
$obi1 = "<table width=\"100%\"><tr><th bgcolor=\"#004080\"><FONT COLOR=WHITE>";
$obi2 = "</FONT></th></tr></table>";
$reftag1 = "<font color=\"$refcol\">";
$reftag2 = "<\/font>";
$msgbgc = "<td bgcolor=\"$tbl_color\">";
$threadlist = "<table align=center cellpadding=3 summary=\"スレッド\">";
} else {
}
}
|
携帯電話用のところは、ちょっとした布石というやつで、実体はまだなにも出来ていません。
あとは、該当するタグを全て変数に置換すればおしまい。
ただ、私は、その他におまけ的なコードを入れています。wforum.cgiの冒頭が次のようになっています。
# 基本処理を定義
&decode;
&axsCheck;
if (($ENV{'HTTP_USER_AGENT'} =~ /^LOUK/)||
($ENV{'HTTP_USER_AGENT'} =~ /^Lynx/)||
($ENV{'HTTP_USER_AGENT'} =~ /TEEN/)
){
if(($mode eq "") && ($in{'list'} eq "")){ $in{'list'} ||= "thread"; }
}
|
何をやっているかというと、デフォルトというかオプション無指定時には通常はツリーリスト表示になりますが、特定のテキストブラウザでアクセスしたときはスレッド形式のリスト表示にさせています。私の場合、テキストブラウザからアクセスするときというのは非力なマシンを使っているときが多いのですが、ツリー表示よりもスレッド表示のほうがデータの転送量が少なくなるため、デフォルト表示はこちらのほうがいいかな、という判断をしました。
そして、たとえばリスト表示であれば、
#---------------------------------------
# リスト表示
#---------------------------------------
sub list_view {
&header;
if ($agenta eq "1" || $agenta eq "2"){
print <<EOM;
携帯電話端末用画面
</body></html>
EOM
exit;
}
|
みたいな形にしてやれば、どんなUAに対しても対応することが可能となります。