| ■ページ埋め込み型のスクリプトでJavaScriptエラーが発生します |
テストモード(単体表示)では異常なく表示(作動)されるのに、
ページに貼り付けるとJavaScriptエラーが発生する現象が確認されています。
原因は3つ考えられます。
- 貼り付け用のコードが<form></form>タグの中に入っている
- birthdayや電光!等は、表示部にフォーム部品を使っています。
貼り付け用のコードが<form></form>タグの中に入っていると、
JavaScriptで処理を実行するフォームの存在が判らなくなってしまいます。
<form></form>タグの中に入らない部分に貼り付け位置を変更して下さい。
- 他のJavaScriptとの変数などの競合
- JavaScriptが解る場合は、変数名などを確認して変更して下さい。
- 解らない場合は表示ページとCGIファイルのURLを明記してメールでご相談下さい。
- サーバーにより広告バナー等が自動挿入される
- 無料HPスペースなどで、CGIにも広告バナー又は、
広告用のミニウィンドウ表示スクリプトコード等が自動挿入される所があります。
この場合、出力したスクリプトに邪魔な文字列が混入する結果となり、
当然、JavaScriptエラーが発生し、表示すらされなくなります。- テストモード(単体表示)で広告バナーが表示されたり
ミニウィンドウが開いたりする場合は、まず間違いなくこれが原因です。- このケースについては、
無料スペースの不正利用を誘発する結果とも也得る為、こちらでは対応できません。
場所によっては、ユーザーが任意で広告を非表示に設定したり、
拡張子がshtml だと自動挿入されない等、色々あるようなので、
そのスペースのHPで利用法やFAQ等を確認するとか
そのスペースの相談窓口に使用法を明記して相談する等して下さい。
| ■birthdayで別ウィンドウを開いたときにアイコン(画像)が表示されません |
登録や確認をするときにミニウィンドウを開くと、
本体には表示されている画像が表示されなくなってしまう現象が確認されています。
これは、CGI以外のファイルとCGIファイルの呼び出しURLが違う場合で、
しかも、CGIの呼び出しURLで、そのままCGI以外のファイルを呼び出しても、
表示されないというサーバーの設定が原因の場合がほとんどです。例) CGI以外のファイル:http://www.xxxxx.ne.jp/~yyyyy/zzz.html CGIファイル:http://cgi.xxxxx.ne.jp/yyyyy/zzz.cgi解決策は、以下の通りです。画像ファイルの設置ディレクトリを空白にして、
# 画像ファイルの設置ディレクトリの位置と名前
# 表示ファイルから見た位置(基本ディレクトリ構成通りならこのまま)
$img_dir = "./birthday/";
↓
$img_dir = "";
画像ファイルの指定部分を全て
http://からのフルパスで記述して下さい。
# メールの登録がある場合のアイコン用画像
$mailimg2 = "mail.gif";
↓
$mailimg2 = "http://www.xxxxx.ne.jp/~yyyyy/birthday/mail.gif";
| ■Netscapeでページ埋め込み型のスクリプトが意図した位置に表示されません |
これは、ネスケのバグというか癖というか、IEとの画面表示法の違いなんですが、
ネスケは読み込みの遅い部分を飛ばして先に進んでしまいます。
その分、レイアウトが早く、表示されるのも早い気がするんですが、
実は、意図したレイアウトが無視されてしまうという、困った現象を引き起こします。
なので、サーバーの負担度合によってスクリプトの読み込み時間が変化し、
その時によって、表示位置が変わってしまうものと思われます。
IEも、読み込みの遅い部分を飛ばして先に進みますが、
読み込み終了後に、レイアウトを見直して修正する仕組みになってるようです。この現象は、<script src="..."></script>を使って表示している場合に発生し、
SSI を使用して表示している場合は発生しません。で、解決策ですが、
もし、SSI の使用が許可されていれば、SSI を使用するのが一番なんですが、
SSI の使用が出来ない場合は、完璧な解決策はありません。
有る程度の効果が確認されている方法は、
<span></span>で、スクリプトコードを囲むというものです。
<span>
<script src="./xxxxx/xxxxx.cgi"></script>
</span>これは、正式なやりかたでは無いと思いますが、何故か有る程度の効果を確認しています。
ダメな場合はまるでダメです。
尚、電光!の場合、v.3.10から、この現象への対応ルーチンが含まれていますので、
アップデートするのが一番手っ取り早いです。
| ■ページ埋め込み型のスクリプトが表示されません |
各種カウンター Birthday 電光! ミニオネア等は、CGIの起動やスクリプトの読み込みに、
SSIタグや<script src>タグを使っています。
どちらにしても、このタグの中のパスが正しくなければ正常に動作しません。
Readme に書いてある表示用のコードは基本設置構成を基準に書いてあります。
実際の設置構成が基本設置構成と違う場合は、当然書き換える必要があります。
SSI の場合は相対パスで記述しますが、
<script src=""></script>を使用する場合、相対パスがよく解らなければ、
http://からのフルパスで記述しても差し支え有りません。相対パスを使用する場合、例えば電光!を例に取ると、
設置場所が http://www.suepon.com/denkoh/denkoh.cgi で、
表示したいページが http://www.suepon.com/index.html ならば、
Readme に書いてある通りに
<script src="./denkoh/denkoh.cgi?js"></script>
又は
<!--#exec cmd="./denkoh/denkoh.cgi"-->これでOKなのですが、
設置場所が http://www.suepon.com/cgi-bin/denkoh/denkoh.cgi で、
表示したいページが http://www.suepon.com/index.html ならば、
<script src="./cgi-bin/denkoh/denkoh.cgi?js"></script>
又は、
<!--#exec cmd="./cgi-bin/denkoh/denkoh.cgi"-->表示したいページが http://www.suepon.com/main/index.html ならば、
<script src="../cgi-bin/denkoh/denkoh.cgi?js"></script>
又は、
<!--#exec cmd="../denkoh/denkoh.cgi"-->の様に記述しなければなりません。
<script src>を使用する場合のみ、
<script src="http://www.suepon.com/cgi-bin/denkoh/denkoh.cgi?js"></script> という様にhttp:// からのフルパスで記述してもOKです。
この場合、例外を除けば、電光!を別サーバーに設置していても有効です。SSI を使用する場合、パスが正しくても設置するサーバーの設定によって、
設置法が異なる場合があります。
SSI を使用できるページは、拡張子がshtml でなければならないとか、
スクリプトファイルの拡張子が .pl でなければならない等、
サーバーによって様々ですので、その辺りはサーバー管理者に問い合わせて下さい。
| ■Hyper_Index3で解析結果のリンク元が全て自分のページになります |
Hyper_Index3 では、リンク元の取得をJavaScript で行っていますが、
フレームを使用している場合にこの問題が起こることがあります。
下記に解決策を記しておきます。トータルアクセスカウンターの表示部に記述するコード
<script>
document.write("<img src='./hyper_index.cgi?ref=",document.referrer,"'>");
</script>に、下の赤字部分を追記して下さい。
<script>
document.write("<img src='./hyper_index.cgi?ref=",parent.document.referrer,"'>");
</script>これで、ほとんど解決します。
| ■海外サーバーにおける時差調整法について |
Perl で時刻を取得する方法にはいくつかの方法がありますが、
色々と解説していると解説ページになってしまい、
CGI Script Market の趣旨にはずれるモノとなってしまうので、
当サイトで配布しているスクリプトに対して一番有効というか、
比較的いじりやすい方法のみを紹介します。当サイトで配布しているCGIスクリプトは、ほとんど以下の取得方法を用いています。
($sec,$min,$hour,$day,$mon,$year,...) = localtime(time); これは、サーバーの設置してある場所での現地時刻を取得するモノです。
スクリプト中のこの文字列を探して、以下のように修正します。
($sec,$min,$hour,$day,$mon,$year,...) = gmtime(time +9*60*60); gmtime() は世界標準時の取得が出来るので、どの国のサーバーに設置していても
同じ時刻が取得できます(できるはずです…そう思いたいものです)
なので、コレを元に日本標準時である世界標準時+9時間に修正するのがこの方法です。
(60*60 → 60秒X60 = 1時間...X9 = 9時間という意味です)
最初からこの方法にしない訳は、ここでは省略します。さて、当サイトで配布しているスクリプトの中には、
時刻の取得を複数回行っているモノがあります。
主にアクセス解析系のスクリプトですが、
この場合、数カ所全てを修正しなければ完全に修正する事が出来ません。
ですが、複数の時刻を取得しているということは、
それぞれ別の時刻を取得しているというコトで、
上記した方法では応用が利かない部分があります。
($sec,$min,$hour,$day,$mon,$year) = localtime(time - 24*60*60);
($sec,$min,$hour,$day,$mon,$year) = localtime(time - 48*60*60);記述された数字を見るとなんとなく想像がつくと思うのですが、
-24 は24時間前、-48 は48時間前を意味します。
従って、このような部分の修正は下記のようにします。
($sec,$min,$hour,$day,$mon,$year) = gmtime(time +(9-24)*60*60);
($sec,$min,$hour,$day,$mon,$year) = gmtime(time +(9-48)*60*60);記述の仕方は色々ありますがとりあえずコレが理解しやすく修正しやすいと思います。