2011-12-29 19 views
0

Facebookのユーザーニュースフィードからルージュアプリケーションを削除する拡張機能があります。Chrome拡張機能がロードされています

拡張子JS内には、プログラムで統計トラッキングに使用される<script>タグが含まれています。基本的には、どの国からアプリケーションを使用しているかを確認することです。

問題は、ユーザーがFacebook上にいるときにトラッキングスクリプトが1回だけロードされることです。また、ユーザーがFacebookをブラウズしているときに、手動でページを更新しない限り、再度読み込まれることはありません。

私のコンテンツスクリプトの中に私のコードがあります。

$(document).ready(function() { 
// Include stats tracking 
(function(d){ 
    var trackingjs, id = 'stats'; if (d.getElementById(id)) {return;} 
    trackingjs = d.createElement('script'); trackingjs.id = id; trackingjs.async = true; 
    trackingjs.src = "tracking_url"; 
    d.getElementsByTagName('body')[0].appendChild(trackingjs); 
}(document)); 
} 

私のプラグインにjQueryを使用しているため、jQueryが含まれています。このスクリプトは一度しか含まれておらず、ユーザーがページを手動でリフレッシュしない限り、もう一度そのスクリプトを含めません。

これはFacebookと関係がありますか?

答えて

-1

document.readyにバインドするだけでなく、すべてのajaxの完了時にトラッカー機能を実行することもできます(新しいページ要求ではなくAjaxリクエスト):

function tracker() { 

// Include stats tracking 
(function(d){ 
    var trackingjs, id = 'stats'; if (d.getElementById(id)) {return;} 
    trackingjs = d.createElement('script'); trackingjs.id = id; trackingjs.async = true; 
    trackingjs.src = "tracking_url"; 
    d.getElementsByTagName('body')[0].appendChild(trackingjs); 
}(document)); 
} 


$(document).ready(tracker); 
$(document).ajaxComplete(tracker); 
+0

感謝。私はajaxCompleteを試しましたが、それもうまくいきませんでした。 – GV1

+0

'ajaxComplete'は、ページ自体とは異なるjQueryのインスタンスなので、拡張コンテキストからは機能しません。つまり、ページのAJAXはこれをトリガーしません。 – Xan

0

あなたは書類上のイベントをクリックして、location.hashが

var currentLocation=location.href; 
document.addEventListener('click', function(){ 
    if(location.href == currentLocation){ 
    return; 
    } 
    currentLocation = location.href 
    // run here your tracking code 
}); 

を変更し、コードが許可することを確認しているかどうかを確認聴いてみて上のようにしても、AJAXによって、ユーザーがページをクリックすると、ページを移動するにはページをリロードすることなく複数回実行するには、今ではそうではありません(facebookはページナビゲーション上のドキュメントを置き換えないので、トラッキング関数d.getElementById(id)の2回目の呼び出しでは空ではなく戻ります)。

あなたはこのようにそれを行うことがあります。

function (d){ 
    var trackingjs, id = 'stats'; if (d.getElementById(id)) {return;} 
    trackingjs = d.createElement('script'); trackingjs.id = id; trackingjs.async = true; 
    trackingjs.src = "<url>"; 
    d.getElementsByTagName('body')[0].appendChild(trackingjs); 
    trackingjs.onload = (function(trackingjs){ 
     trackingjs.parentNode.removeChild(trackingjs); 
    })(trackingjs) 
};