2010年07月22日

ようやく Firefox に対応しました。

Firefoxで「すらすらプログラマー」を見るとBOXのラインが1dotずれるのを昔から気になっていたのですが、ようやく対応しました。



初めは JavaScriptで何とかしようと思っていたのですが、なかなかうまくいかずにギブアップ。結局DIV追加して対応したのですが、それでも微妙なずれは解消せずに苦肉の策でcgiを作りました。

[stylesw.cgi]
#!/usr/local/bin/perl

$l=1;

# stylesw.cgi?id=X

my $name = "";
my $value = "";
my $buf = "";
my $id = "";
my $bw = "";
my $filename;

# ========== クエリ情報取得 ==========
if( $ENV{'REQUEST_METHOD'} eq "GET" ){ 
    $buf = $ENV{'QUERY_STRING'}; 
} else { 
    read( STDIN, $buf, $ENV{'CONTENT_LENGTH'} ); 
}

@query = split(/&/, $buf);
foreach $buf ( @query ){
    ($name, $value) = split(/=/, $buf); 

    # デコード
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2', $1)/eg;
    if( $name eq "id"){
        $id = $value;
        last;
    }
}

# ========== ブラウザ判定 ==========
$buf = $ENV{'HTTP_USER_AGENT'};
if($buf =~ /MSIE/){
    $bw = "IE";
}elsif($buf =~ /Mozilla/){
    $bw = "MF";
}

# ディレクトリトラバーサルの脆弱性を避けるためにIDに合わせてファイル名をセットします。
if($id eq '1'){
    $filename = './template/surasura/style.css';
}else{
    exit;
}

print "Content-type: text/css\n\n";

# ファイル読み込み
open(IN, "<$filename");
while (<IN>)
{
    if( $_ =~ /#(IE|MF)(.*)/i ){
        if( $1 eq $bw ){
            print $2;
        }
    }else{
        print $_;
    }
}

# クローズ
close(IN);

exit;


このcgiで読み込むstyleシートにIEとFirefoxを区別するタグを仕込みます。

#IE  line-height    : 130%;
#MF  line-height    : 130%;

後はhtmlに

<LINK rel="stylesheet" type="text/css" media="all" href="stylesw.cgi?id=1">

を追加すれば1つのスタイルシートでIEとFirefoxに対応できるようになります。

もし同じようなことで困っている方がいらっしゃれば参考にしてみてください。
posted by j.shiozaki at 23:05| Comment(0) | TrackBack(0) | Merge HTML

2010年04月18日

とりあえず一区切り

本日 MergeHTML 1.1.0 をリリースしました。
今回のリリースでは、動作の安定化とセキュリティの強化を行いました。更新内容は以下のとおりです。

<mghmain.pl>
  1.コンテンツのDOC TYPE チェック処理の追加
  2.ディレクトリトラバーサル制限の追加
  3.パス名の \ を / に変換
  4.相対パス出力に対応
<mghcom.pl>
  1.拡張子を変えずにログをリネームするように修正
  2.同期化ロックメソッド追加
  3.ログにロック処理を追加
  4.ログにIPアドレスを追加
<mghcounter.pl>
  1.アクセスカウンタにファイルロック処理を追加
  2.IP アドレス制限処理を追加
  3.クッキーに有効期限を設定
<mghconfig.pl>
  1. セキュリティの設定を追加
  2. アクセスカウンタの設定を追加
<mghtools.pl>
  1.グループID指定でマージできないバグを修正

とりあえずやりたい事は一通り実装できたので一区切りつけたいともいます。
今後の展開もいろいろ考えているのですが J.S Draw の開発が途中なので、次はそっちに取り組みます。
J.S Draw も楽しみにしていてください。
posted by j.shiozaki at 15:41| Comment(0) | TrackBack(0) | Merge HTML