人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

●質問者: g138
●カテゴリ:インターネット ウェブ制作
✍キーワード:URL たか イベント ウィンドウ カウント
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●500ポイント

じゃあ、ぼくの案。


親の 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で呼び出す先の内容をサーバー側で事前に取得しておくことができず、

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

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


2 ● a-kuma3
●500ポイント

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

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


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

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

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

echo $contents;
?>

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

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


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

◎質問者からの返答

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ