TOP > スクリプト制作メモ > フレームを利用したページにアクセス解析を設置する


 フレームを利用したページに dopv をはじめとしたアクセス解析スクリプトを設置すると、リンク元情報がすべてフレームページのアドレスとなり、リンク元情報が正しく取得できません。

訪問者のリンク元を知りたいというのは、アクセス解析を設置する大きな動機のひとつなのに、それはまことに困った事態です。

 最近ではフレーム対応のブラウザの普及に伴い、トップページからフレームを利用した分割ページであるサイトも少なくありません。「フレームを利用したら、リンク元情報を正しく取得できなくなります」というスクリプト制作者の言い訳はもはや通用するはずもなく、ユーザーは「フレーム利用ページでもリンク元情報が知りたい欲求」をつのらせるばかりです。

 そこで、私がちゃっちゃと調べてみたフレームページでリンク元を取得するための方法を以下に記しておきます。参考にして下さい。

≫document.referrer に parent を付け加える。

例えば dopv の呼び出しHTML(JavaScript)の
document.write("&&",encodeURIComponent(document.referrer));

document.write("&&",encodeURIComponent(parent.document.referrer));
に変更します。

dopvCOMET* や dopvSTAR* の場合は
var rf = encodeURIComponent(document.referrer);

var rf = encodeURIComponent(parent.document.referrer);
に変更します。

とりあえずこんだけで対策完了。
これで index.html から A.html, B.html をフレームで呼びだす場合に、A.html 中で parent.document.referrer としてアクセス解析スクリプトを呼び出せば index.html のリンク元情報を取得することができます。あまりにも簡単だからと言って、対応を怠った作者への怒りをあらわにするのはやめましょう。調べてみたらこんなんだったんだもん。
ただし、この対処法は全てのブラウザに対応しているものではありません。IE5〜、NN4.7〜は大丈夫なようですが他はよくわからないので各自チェックしてみてください。




≫アクセス解析用のページを経由させ、本来のページに飛ばす

フレームを使用している通常の index.html を別名(例えば index2.html )に変更し、index.html (スタートページ)でアクセス解析を行い、元のスタートページであった、いわゆるフレームページの index2.html にジャンプさせます。

■■■ index.html の中身は以下のような感じ■■■

<html>
<head>
<meta HTTP-EQUIV="REFRESH" content="1;URL=index2.html">
<title>index</title>
</head>
<body>

<a href="http://tech.bayashi.net/">
<script type="text/javascript" language="JavaScript">
<!--
document.write("<br><img src='./cgi-bin/dopv.cgi?");
document.write(navigator.platform);
document.write("&amp;&amp;" + screen.width + "x" + screen.height);
document.write("&amp;&amp;INDEX");
document.write("&amp;&amp;",screen.colorDepth);
document.write("&amp;&amp;",screen.pixelDepth);
document.write("&amp;&amp;",navigator.language);
document.write("&amp;&amp;",encodeURIComponent(document.referrer));
document.write("' width=11 height=11 alt='dopv' border=0 />");
// -->
</script>
</a>

<center>
<a href="index2.html">2〜3秒たってもこのページのままの場合はここをクリック</a> してください。
</center>

</body></html>
■■■■■■■■■■■■■■■■■■■■■■■■■

この方法だと、スタートページのファイル名を変更しなきゃならないのと、訪問者にしてみれば無駄なページを経由してしまうという問題があります。スタートページを扉ページと割り切って、いい感じに仕上げれば逆にいいかもしれません。

≫アクセス解析用にフレームをひとつ増やす

アクセス解析用にフレームをひとつ増やします。そしてフレームを利用したページを JavaScript で記述します。要はアクセス解析をひとつのフレームとして呼び出すということです。

☆変更前
■■■ index.html ■■■■■■■■■■■■■■■■■■■■■■■■■
<html>
<head>
<title>index</title>
</head>
<frameset cols="250,*">
<frame src="A.html">
<frame src="B.html">
<norfames>
フレームが利用できない方は<a href="B.html">ここ</a>をクリックして下さい
</noframes>
</frameset>
</html>
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

☆変更後
■■■ index.html ■■■■■■■■■■■■■■■■■■■■■■■■■
<html>
<head>
<title>index</title>
</head>
<SCRIPT Language="JavaScript">
<!--
document.write("<frameset cols='250,*,1'>");
document.write("<frame src='A.html'>");
document.write("<frame src='B.html'>");
document.write("<frame src='./cgi-bin/dopv.cgi?");
document.write(navigator.platform);
document.write("&amp;&amp;" + screen.width + "x" + screen.height);
document.write("&amp;&amp;INDEX");
document.write("&amp;&amp;",screen.colorDepth);
document.write("&amp;&amp;",screen.pixelDepth);
document.write("&amp;&amp;",navigator.language);
document.write("&amp;&amp;",encodeURIComponent(document.referrer));
document.write("' width=11 height=11 alt='dopv' border=0 />");
document.write("<noframes>");
document.write("フレーム利用できない方は<a href='B.html'>ここ</a>をクリック");
document.write("</noframes>");
document.write("</frameset>");
// -->
</SCRIPT>
</html>
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

無理矢理な気もする対策ですが、一応これでも大丈夫です。HTML を JavaScript で記述する面倒くささがハンパじゃないと思います。1ピクセルとはいえ関係ないフレームが出てしまうのもいただけません。ただし2の対策に比べるとファイルが増えないという利点はあります。

TOP > スクリプト制作メモ > フレームを利用したページにアクセス解析を設置する
(C) bayashi.net