Chrome扩展程序加载Javascript

时间:2011-12-29 17:42:29

标签: javascript jquery google-chrome google-chrome-extension

我有一个扩展程序,可以从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有关吗?

2 个答案:

答案 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);