Chrome扩展加载Javascript

Chrome扩展加载Javascript,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我有一个扩展,可以从Facebook上的用户新闻源中删除胭脂应用程序 在扩展JS中,我编程地包含了一个用于统计跟踪的标记。基本上看有多少人在使用该应用程序,来自哪些国家等 问题是当用户在Facebook上时,跟踪脚本只会加载一次。当用户浏览Facebook时,除非他们手动刷新页面,否则不会再次加载 这是我的内容脚本中的代码 $(document).ready(function() { // Include stats tracking (function(d){ var tracking

我有一个扩展,可以从Facebook上的用户新闻源中删除胭脂应用程序

在扩展JS中,我编程地包含了一个用于统计跟踪的
标记。基本上看有多少人在使用该应用程序,来自哪些国家等

问题是当用户在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有关吗?

除了绑定到document.ready之外,您还可以为每个ajax完成运行跟踪功能(因为这可能是Facebook在用户导航时触发的:ajax请求,而不是新页面请求):


要导航页面,即使是通过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)
};
功能(d){
var trackingjs,id='stats';if(d.getElementById(id)){return;}
trackingjs=d.createElement('script');trackingjs.id=id;trackingjs.async=true;
trackingjs.src=“”;
d、 getElementsByTagName('body')[0].appendChild(trackingjs);
trackingjs.onload=(函数(trackingjs){
trackingjs.parentNode.removeChild(trackingjs);
})(trackingjs)
};

谢谢。我确实尝试过ajaxComplete,但也不起作用。
ajaxComplete
在扩展上下文中不起作用,因为它是与页面本身不同的jQuery实例,所以页面的AJAX甚至不会触发这种情况。
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)
};