iframe内のリンク数を計測できる方法を探しています


iframeを利用したサイトで、iframe内がクリックされたかどうかを計測できる方法を模索しています。
要件としては、
・iframeの中のページは別ドメインであり内容も変更不可
・あくまで親ウィンドウの中の操作だけで完結させる
・iframe内のクリックイベントは通常通り動作するようにする
といったところが必須になります。
iframeの中は毎回形式が変わるので、ここからURLを取ってきて書き換えるということもできません。

例えば、何らかの形でiframeの上に透明のレイヤーを置いて
そのレイヤーのクリックカウントを取得するなど何か方法はないでしょうか。

どのような方法でも構いませんので、できる手段があれば教えて下さい。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/08/17 21:04:38
  • 終了:2011/08/24 21:05:03

回答(2件)

id:a-kuma3 No.1

a-kuma3回答回数4488ベストアンサー獲得回数18572011/08/18 16:19:13

ポイント500pt

じゃあ、ぼくの案。


親の iframe で、src に想定している URL をパラメータとして受け取るような自前の CGI を指定する。

もしくは、スクリプトで処理。

<iframe src="/display_frame_contents.php?url=http://www.hogehoge.com/">
    ...

その CGI では、パラメータで指定されたページの内容を取得し、ちょっとだけ改変して、

レスポンスに返す。


「ちょっとだけ改変」というのは、自前のサイトにある外部スクリプトファイルを読み込む <script> を、適当なところに挿入する。


自前のサイトに配置した外部スクリプトでは、ページの onload 時に、全てのアンカーの onclick を変更するような処理を書く。

既に onclick が指定されているなら、その処理も呼ぶ。

onclick では、アンカーの href を、それをパラメータとして受け取るような自前の CGI (二つ目) に変更してします。

    for (...) {
        var anchor = ...;
        var original_handler = anchor.onclick;
        anchor.onclick = function() {
                this.href = "/count_up.php?url=" + this.href;
                if (original_handler) {
                    return original_handler.apply(this)
                }
            }
    }

二つ目の CGI では、その URL に遷移する旨をカウントアップする処理 (DB に保存?) を書き、

meta の refresh かなんかで、遷移すべき URL に遷移する。


# 途中、埋め込んだコードは、あくまでも雰囲気だけなので、ご了承を。


カウントアップの処理をするのに、CGI をかませるんじゃなくて、

同期を取った XMLHttpRequest で、カウントアップの処理を呼び出しておいてから、

本来の遷移を行う、というのもアリかな、という気はする。


最後だけど、ぼくが前提として想像したこと。

  • 計測する処理は、どこかに残しておくんだろうから、サーバサイドの処理になるだろう
  • iframe に表示されるページは、別ドメインとは言っても、それほどバリエーションが大きいコンテンツじゃなさそうだ
  • 親ウィンドウの操作だけで完結される、というところを、ちょっと外れちゃうかな...

以上、参考になれば。

id:g138

素晴らしいご回答ありがとうございました。

ただ、後からの説明で大変申し訳ないのですがiframeで呼び出す先の内容をサーバー側で事前に取得しておくことができず、

大変素晴らしい方法であるにも関わらず私たちの環境では実現が難しそうです。

もし他の方法でもできる方法がありましたら別途ポイントも追加させていただけますのでお教えいただけますと幸いです。

2011/08/18 19:26:54
id:a-kuma3 No.2

a-kuma3回答回数4488ベストアンサー獲得回数18572011/08/18 22:45:25

ポイント500pt

iframeで呼び出す先の内容をサーバー側で事前に取得しておくことができず、

一応、想定してたんだけどな。


iframe の src に書いておく CGI のイメージ。

<?php
$url = $_POST['url'];
$contents = file_get_contents(url);

    // ここで、$contents の適当なところに
    // <script src="自前のドメインのスクリプト"></script>
    // を埋め込む
$contents = ...;

echo $contents;
?>

事前に読み込んでおくんじゃなくて、iframe を表示するときに表示先の内容を読みこんで、

その内容をちょっとだけ変える、というイメージなんだけど。


何か、勘違いしてるかしら?

id:g138

ご返答ありがとうございます!

事前というは夜間バッチなどであらかじめ用意しておく事ではなく、

「リクエスト時にサーバー側で事前に取得」との意味合いでございました。

実際iframeを描画した後に親ページ(自前)で何らかの方法で、

iframeのクリックカウントを集計出来る方法を模索しております。

こちらの説明不足で申し訳ございません。

2011/08/19 10:45:25
  • id:a-kuma3
    ふたつほど、質問。

    ・その iframe は、自前のページで書いてるものですか?
      それとも、ブログパーツや adsense のように、iframe のタグ自体も自前で制御して無いものでしょうか?

    ・iframe を抱える自前のページを持ってるサイトでは、PHP や Perl などは使えますか?
  • id:g138
    ご質問ありがとうございます。
    > ・その iframe は、自前のページで書いてるものですか?
    > それとも、ブログパーツや adsense のように、iframe のタグ自体も自前で制御して無いものでしょうか?

    はい、その認識でお願いいたします。


    >・iframe を抱える自前のページを持ってるサイトでは、PHP や Perl などは使えますか?

    はい、PHPでもPerlでも、FlashでもAjaxでも何でも可能です。
  • id:a-kuma3
    >はい、その認識でお願いいたします。
    自前のページで iframe を書いている、ということで良いのね。

    最初に質問を読んだ時には「クリック」=「アンカーのクリック」だと思ってた(思い込んでた)のですが、
    もしかしたらページの遷移だけではなくて、
    何のアクションも起こらないようなクリックも拾いたい、ということでしょうか?
  • id:g138
    > 自前のページで iframe を書いている、ということで良いのね。

    はい、その形です。


    > 最初に質問を読んだ時には「クリック」=「アンカーのクリック」だと思ってた(思い込んでた)のですが、
    > もしかしたらページの遷移だけではなくて、
    > 何のアクションも起こらないようなクリックも拾いたい、ということでしょうか?

    こちらですが、現在想定しているのがiframeの中でバナーのようなものを開き表示する形式です。
    そのため、iframeの枠内はすべてページ遷移の起こるクリックになるとお考えいただければ幸いです。
  • id:a-kuma3
    >親ウィンドウの操作だけで完結される、というところを、ちょっと外れちゃうかな...
    やっぱ、これがひっかかったか :-(

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません