ラウンジ(兼FAQ掲示板)

Firefoxでの電光!の動作について
過去ログ NO.1145624435
□ Firefoxユーザー [2006年04月19日14時42分]
電光! v.5.20
ブラウザ:Firefox 1.5.0.2, InternetExplorer 6.0.2900.2180

過去にも質問が出ていましたが、回答がなかったので新規に起こします。

新規投稿を行う際に、背景色、文字色を選択せずに投稿を押下した場合、
InternetExplorerですと、デフォルトの背景色、文字色が適用され、
ログファイルにもそれが書き込まれます。
しかしFirefoxで同じように行うと、背景色に[object Event]が記録されてしまいます。

これは投稿画面を開いたときに実行される
function bgc(col)
の呼び出しが、FirefoxとInternetExplorerで解釈が違うようで、
InternetExplorerだとcol=null、
Firefoxだとcol=[object Event]
で呼び出されてしまうようです。
そのため、1,175行目のif文でcolがnullでないと判断され、
背景色に[object Event]が適用されてしまいました。

そこで631行目のリセットが押下された場合の処理と、
1,183行目の画面が呼び出されたときの処理の呼び出しを、
bgc(null);
としてみたところ、期待通り1,175行目のif文には引っかからず、
1,177行目の背景色、文字色にそれぞれデフォルト値を採用するルートを通りました。

ところが、ログファイルを見てみると何故か背景色も文字色も記録されていませんでした。
(カンマが並んでいる状態)
修正前は期待値ではないとはいえ、値が記録されていたことを考えますと、
今回の修正が原因だとは思いますが、
実際どこで値が消えてしまっているのかわかっていません。
申し訳ありませんが、ご教授お願いします。
□ NXer [2006年04月21日11時14分]

はじめまして。NXerです。

----------当方のテスト環境---------------
以下の変更は、当方のローカル・サーバでテストした結果です。
使用しているperlは、 5.8.8版(Build 817 Wednesday, Mar 22, 2006)です。
Firefoxさんが契約されているサーバーのperlは、当方には不明です。
電光!を動作させる1行目に #! /usr/bin/perl と記述されている
perlは、おそらく、5.8版と考えて以下の愚案をお知らせます。
-----------------------------------------

その1 文字色と背景色の保存はできました。

ただし、残る不具合の解消には、その2の変更が必要です。
-----------------------------1350行付近元スクリプト in javascript
1350 function bgc(col) {
if (col && document.denkoh_f.col_mode[0].checked) bg = col;
else if (col) tx = col;
else { bg = dbg; tx = dtx; }
-----------------------------------------------------------挿入
1355 if (bg=="[object Event]"){bg="#" + hex[0] + hex[0] + hex[0] + hex[0] + hex[0] + hex[0];}
-------------------------------------------------------------
1357 document.denkoh_f.coment.style.color = tx;
1358 document.denkoh_f.coment.style.background = bg;
1359 document.denkoh_f.txcol.value = tx;
1360  document.denkoh_f.bgcol.value = bg;
------------------------------------------------行番号はその付近
説明:
すぐ上の4行は、上2行と下2行と動作内容が異なります。上2行で、
投稿画面のコメント文字色 tx 1357行
投稿画面のコメント背景色 bg 1358行 
が設定されます。投稿画面でパレットにて自由にそれぞれの色の選択が
できました。
coment (英語綴りはcomment)は、入力フォームの投稿文フォーム
のこと。styleとは、スタイルシートで定義されるスタイル。
属性にcolorとbackgroundなどがあります。

下2行の働きで、保存用の値(value)を代入(= assign)しています。
txcolとbgcolで、文字色と背景色が保存ができました。

しかし、投稿画面の背景色が電光!に直ちに反映されない欠点が残ります。
これで運用に問題がなければ、1355行目の変更ですみます。
運用では、初期値を変更するような背景色の選択があれば、問題はありません。
このわずかばかりの不具合の解消は、偶然、多言語対応用にその2のような変更を
したところ電光!を再起動しなくても背景色が電光!に反映されることが分か
りました。環境によっては、大きな可能性を秘める変更ですから、お試し
ください。

その2 ユニコード対応電光!に変更

-----------Firefoxユーザーさんのcgi歴不明のため、既知の情報かもしれません。
2.1 utf-8ですでに保存した電光!をエディタの文字コードをutf-8に指定して
開きます。
2.2 そのままで以下の変更をします。
--------------------------------------

スクリプト中の
charset = "Shift-JIS" をすべて
charset = "utf-8"   にします。
----------------------------------------
48 # jcode.pl
49 # このスクリプトファイルから見たパスで記述
50 # $jcode = "./jcode.pl";
212 # if ($buffer) { require $jcode; }
239 # &jcode'convert(*value,'sjis');
-------------------------------------------
上の行は、削除もしくは、例のように行頭に#を付けて
無効化(comment out)してください。

2.3 変更後、エディタの文字コードを自動で(またはutf-8に指定の上)
保存します。

電光!を単独起動して、新規投稿を試みてください。
パレットで背景色文字色を選択して入力、投稿。さて、電光!に
反映されますでしょうか。

以上です。

*************************************************
ラウンジでは、〜する「には」について愚案を書いています。
しかし、その2の変更やfirefoxなどの新しい環境で電光!
を運用するには、どうしても文字コード「とは」に深く関わる
ことがあります。主宰者のすえぽんさん、利用者の皆さんの
ご理解をいただき、愚考を書かせていただきます。

1 環境の変化 --文字コードの進化--

電光!は、2001(-2003)年に生まれました。このcgiは、
javascriptとperlというスクリプト言語で動作します。いわゆる
ハイブリッド・スクリプトです。当時のperlは、5.6版でした。
日本では日本語文字(漢字、かな)で運用することが前提です。
そのためには、ascii文字のabc,,,ABC,,,012,,,!"#$% + =などの
64文字、4ビットで対応できるラテン文字(西欧語)とは異なる
処理が必要になりました。
それには、歌代さんが開発されたjcode.plというスクリプトを使
います。日本語変換では、たとえば、
239 # &jcode'convert(*value,'sjis');
のように文字コードを指定することができます。

さて、文字コードには、代表的なものに次の4つがあります。
1.1  PC8001など古典的な時代は、JISがあり、漢字in 漢字outという
   処理をしていました。現在メーラのメール本文に残っています。
1.2  ウィンドウズ系では、Shift-JIS、
1.3  UNIX系では、EUCが中心です。
1.4  unicode(utf-8など)は、将来的にそうなるだろうという程度でした。

javascriptも変化しています。IEとfirefoxが利用するその版が少し違う
ためにFirefoxユーザーさんの不具合が発生したのかも知れません。

cgiスクリプトの開発は、利用される環境に対応するため、すえぽんさんの
Shift-JISの選択は、当時も今も適切な選択であると思います。

OSでは、Windows 2000、Windows XPは、内部処理をunicodeにしています。
多くのブログや検索エンジンはunicodeを採用しているようです。

2 ユニコードの電光! -- denkoh!に変身 --

unicode(以下utf8)は、世界の言語が使えるglobal standard
universal standardということが出来ると思います。
電光!は、即時あるいは比較的短期の伝言システムとして画期的な
作品ですが、日本語という言語の制約があります。
しかし、上記のように、文字コードをutf8とすることにより
非西欧語の日本語はもちろん、韓国/朝鮮語、中国語、タイ語
チベット語、グジャラート語、アラビア語などの利用が可能です。
想像をたくましくすると、電光!がdenkoh!に変身を遂げます。
インターネット時代は、英語ができなければ世界に通用しない、
といわれてきましたが、utf8は、それぞれの言語がネットで等し
く通用することを保証する文字コードです。

ただし、Lucida Sans Unicodeでアラビア語を入力すると
右から左に書く文字のために、流れる方向を逆転させる変更が
必要です。これは、日本語では、トラックなどの運転手側のボディ
に会社名を右から左に書くのに似ています。そういった言語文化を
担うことができるdenkoh!です。

フォント・ファミリーの指定は、次の各行の追加で可能です。
--------------------------------------------------------
1475 body {
font-family:"MS UI Gothic","Lucida Sans Unicode","Doulos SIL","MS 明朝",Osaka;
1488 input,textarea {
font-family:"MS UI Gothic","Lucida Sans Unicode","Doulos SIL","MS 明朝",Osaka;
----------------------------------------------------------
なお、Windows系は、Lucida Sans Unicodeがたぶん購入時搭載済みフォントです。
Doulos SILは、無料でダウンロード可能なIPAなどのフォントを含みます。

FirefoxユーザーさんのウェブサイトURLなど一切不明です。電光!設置の
目的も不明です。それをよいことに愚観を交えた投稿の段、お許しください。
当面使えそうな点があれば適当に拾い読みしてください(汗&笑)。

□ (Firefoxユーザー改め)Massa [2006年04月21日16時23分]
NXerさん、はじめまして。
返信ありがとうございます。

あれから継続して調査をしていましたが、
なんとか期待通りの動きをするようにできたので、
フィードバックさせて頂きます。
なお、当方の動作環境はPerl5.8です。

修正1:関数bgcを引数なしで呼び出している部分を、nullを渡すようにする

631c631
< if ($agent =~ /msie/i || $agent =~ /gecko/i) { $bgc = " onClick=\"bgc()\""; }
---
> if ($agent =~ /msie/i || $agent =~ /gecko/i) { $bgc = " onClick=\"bgc(null)\""; }

1183c1183
< onload = bgc;
---
> onload = bgc(null);

ここまでは前回お伝えしたとおりの修正です。
これによって期待通りデフォルト値、もしくはcookieの値が適用されます。

しかし、ログファイルには反映されません。
調べてみたところ、JavaScriptコンソールに
"document.denkoh_f.txcol has no properties"
といったエラーが出ていることに気がつきました。

どうやら1,180行目の
document.denkoh_f.txcol.value = tx;
が実行されるときに、それより後に記述されている
<input type=hidden name=txcol>
が見つからないのが原因だったようです。

修正2:txcol, bgcolの定義を早める

1153a1154,1155
> <input type=hidden name=bgcol>
> <input type=hidden name=txcol>

1191,1192d1192
< <input type=hidden name=bgcol>
< <input type=hidden name=txcol>

修正3:サイズ設定部分の調整

ソースを眺めていて気がついたのですが、
FirefoxはNetscape6.2以前のバージョンで認識されているようです。

既存のソースではUser-AgentにGeckoが含まれる場合、
スラッシュで分割した最後の文字列を取得し、6.2より小さいか判定していました。
例1:Netscape6.2の場合
User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:0.9.4) Gecko/20011019 Netscape6/6.2
$g_ver=6.2

例2:Firefoxの場合
User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2
$g_ver=1.5.0.2

そこで"Gecko/XXXXXXXX"のXXXXXXXXの部分で比較を行うようにしてみました。
ただし、20011019という日付を境界としていますが、
この値を含め、この判定方法で正しいのかは判断できません(^^;

252,260c
< if ($agent =~ /gecko/i) {
< @g_vers = split (/\//,$agent);
< $g_ver = pop (@g_vers);
< }
< if ($agent =~ /msie/i && $agent =~ /mac/i) {
< $url_size = int($url_size * 0.7);
< $file_size = int($file_size * 0.7);
< }
< if (! ($agent =~ /msie/i) && $g_ver < 6.2) {
---
> if ($agent =~ /gecko/i) {
> @agent_elems = split (/ /,$agent);
> foreach $agent_elem (@agent_elems) {
> if ( $agent_elem =~ /gecko/i ) {
> @g_vers = split(/\//,$agent_elem);
> $g_ver = pop (@g_vers);
> }
> }
> }
> if ($agent =~ /msie/i && $agent =~ /mac/i) {
> $url_size = int($url_size * 0.7);
> $file_size = int($file_size * 0.7);
> }
> if ( !($agent =~ /msie/i) && $g_ver < 20011019) {

長文、乱文となってしまいましたが、
これから設置する方の参考になればと思います。
□ NXer [2006年04月21日22時00分]

Massaさん、あらためてよろしくおねがいします。NXerです。

>期待通り
ということで安心しました。また、貴重なまとめをご報告いただき
慣れないfirefoxをすこし使いこむことが出来ました。
ありがとうございます。

ieを常用していることや、Massaさんのサイズ調整案から、クロス
ブラウザ(複数ブラウザ適合)のウェブ・スクリプト作成で、すえぽ
んさんの苦労がやっと理解できました。

今回初めてfirefoxを使いました。javascriptコンソールも使うこと
が出来ました。間違っているかも知れませんが、電光!を利用され
る場合に、発生するエラーを書いておきます。
--------------------------------------------------------
エラー: 不明なプロパティ 'scrollbar-arrow-color' が使用されています。
このスタイル宣言は無視されました。
ソースファイル: 行: 12 
以下同じ結果
scrollbar-arrow-color:#7b68ee;
scrollbar-track-color:#ffffff;
scrollbar-face-color:#ffffff;
scrollbar-highlight-color:#ffffff;
scrollbar-3d-light-color:#ffffff;
scrollbar-shadow-color:#7b68ee;
scrollbar-darkshadow-color:#ffffff;
scrollbar-base-color:#7b68ee;
------------------------------------------------

電光! 新規投稿ウィンドウで必ず発生するエラーです。

css一覧(古旗一浩、JavaScript例文活用辞典、2001)によると
styleの記述表現が、上の表現は、IEの独自拡張のようです。

scrollbarArrowColor が javascriptでの表記のようです。
しかし、そのように修正しても、firefoxで処理されるかどう
かは不明です。NN6版では、不可のようです。

すえぽんさんの原作で、今回問題のエラーが出ることが確認できました。
-------------------------------------------------------
エラー: 'background' プロパティの値をパース中にエラーが発生しました。
このスタイル宣言は無視されました。

この場合も投稿サブルーチンで発生しています。

function bgc(col) {
if (col && document.denkoh_f.col_mode[0].checked) bg = col;
else if (col) tx = col;
else { bg = dbg; tx = dtx; }
document.denkoh_f.coment.style.color = tx; // 入力文字色
document.denkoh_f.coment.style.background = bg; // 入力背景色

当方の修正愚案では、このエラーは発生しませんが、しかし、
やはり、下のスクリプトの実行段階で、backgroundエラーが出ています。
運用には影響はありません。
------------------------------------------------------
if (a[8]) {
document.denkoh_f.inf.style.background = a[8];
--------------------------------------------------------

環境の変化で、ウェブが進化するという考えがあります。
電光!が、ウェウ界で生存するために、どのように適応
していくのでしょうか。それは、まるで新たな生命体の
ような存在にも感じられるところが、「萌え/燃え」の始まりです。
一定時間書込が無かったので過去ログに移りました

suepon.com | CGI作成/CGI制作 | JavaScript | ドメイン検索 | バナー自動作成 | Google ダンスツール | 松浦亜弥 | H.P.memo | パソコン | ネイル

Copyright (C) 2002 - 2009 suepon , All rights reserved. Powered by CGI Script Market.