1

以下のコードは動作します...時々動作しますが、常に動作しない理由はわかりません。

さまざまな 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 のみを使用することが強く推奨されています。

4

1 に答える 1

0

多分これはうまくいくでしょう。お知らせ下さい。

for(var i=0,l=my_img_elements.length; i<l; i++){
  var mi = my_img_elements[i], ni = new Image;
  ni.src = mi.src = mi.src.replace(".gif", "." + shopping_tag + ".gif");
  ni.onload = onload_handler;
}
于 2013-10-02T01:09:32.620 に答える