我有一个扩展程序,可以从Facebook上的用户新闻Feed中删除胭脂应用程序。
在扩展程序JS中,我以编程方式包含<script>
标记,用于统计信息跟踪。基本上看看有多少人在使用该应用程序,来自哪些国家等。
问题是当用户在Facebook上时,跟踪脚本只会加载一次。当用户浏览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有关吗?
答案 0 :(得分:0)
要导航页面,即使是ajax,用户也会点击页面,因此您可以尝试在文档上侦听点击事件并检查location.hash是否已更改
var currentLocation=location.href;
document.addEventListener('click', function(){
if(location.href == currentLocation){
return;
}
currentLocation = location.href
// run here your tracking code
});
并确保您的代码允许多次运行而无需重新加载页面,现在它不会(facebook不会在页面导航上替换文档,所以在第二次调用跟踪功能时d.getElementById( id)不会为空并且将执行返回。)
你可以这样做:
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)
};
答案 1 :(得分:-1)
除了绑定到document.ready之外,您还可以为每个ajax完成运行跟踪器功能(因为可能是用户导航时由facebook触发的内容: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);