以下のコードは動作します...時々動作しますが、常に動作しない理由はわかりません。
さまざまな Web ページにある [今すぐ購入] PayPal ボタンを押した人の数を調べています。
mod_rewrite
現在、サイトの各ページは、Apache アクセス ログで簡単に grep できる固有の場所から 43 バイトの 1x1 gif を取得します (おかげで)。その画像のURLをjavascriptで変更できれば、ブラウザの進むボタンや戻るボタンを動かしたまま、アクセスログでクリックを追跡できるのではないかと考えました。
以下のコード ( Override_Form_OnClick()
) は、ページ上のフォーム (1 つしかない) を探し、ハンドラー ( my_shopping()
) をフォームのonclick
ハンドラーにアタッチします。
次に、my_shopping()
ハンドラーは指定された画像リソースを更新しmy_stats
(ここでも 1 つしかありません)、フォーム要素のsubmit
関数を画像のonload
ハンドラーにアタッチし、新しい画像が読み込まれるまでフォームが送信されないように false を返します。
そのつもりですが、常にアクセスログに新しい画像が記録されるとは限りません。確かに、開発ツールを使用して Chrome でのみテストしているので、他のブラウザの問題でしょうか?
<script>
function my_shopping(onload_handler, shopping_tag) {
'use strict';
var my_img_elements = document.getElementsByName('my_stats'),
my_img_url,
i,
len;
len = my_img_elements.length;
if (len > 1) {
alert("Multiple my_stats elemetns on page: only expected 1.");
}
for (i = 0; i < len; i += 1) {
my_img_url = my_img_elements[i].src;
my_img_url = my_img_url.replace(".gif", "." + shopping_tag + ".gif");
my_img_elements[i].onload = onload_handler;
my_img_elements[i].src = my_img_url;
}
return false;
}
function Override_Form_OnClick() {
'use strict';
var elements = document.getElementsByTagName('form'),
element,
i,
len;
len = elements.length;
if (len > 1) {
alert("Multiple 'form' elements on page: only expected 1.");
}
for (i = 0; i < len; i += 1) {
element = elements[i];
element.onclick = function () { my_shopping(element.submit, "shopping.PayPal") };
}
return true;
}
Override_Form_OnClick();
</script>
この Web サイトのポリシーでは、javascript のみを使用することが強く推奨されています。