定期检查选项卡的打开情况

时间:2013-11-26 05:53:54

标签: jquery google-chrome-extension

我已将我的网站设置为谷歌浏览器扩展程序。目前发生的情况是,当我点击扩展程序图标时,它会导航到我网站的主页。现在我需要的是,当我安装扩展时,当时(即扩展变为活动时)本身,它必须检查我的网站的页面是否已经在任何其他选项卡中打开。如果它没有打开则创建一个新的选项卡。如果它被打开,那么它必须自动执行所有功能,就像我点击扩展图标时一样。 这是我的background.js

     function getGmailUrl() {
     return "http://calpinemate.com/";
     }
     function isGmailUrl(url) {
     return url.indexOf(getGmailUrl()) == 0;
     }
     chrome.browserAction.onClicked.addListener(gotopage);

     function gotopage(){    
     chrome.tabs.query({
      url: "http://calpinemate.com/*",
      currentWindow: true
      }, function(tabs) {
      if (tabs.length > 0) {
        var tab = tabs[0];
        console.log("Found (at least one) Gmail tab: " + tab.url);
        console.log("Focusing and refreshing count...");
        chrome.tabs.update(tab.id, { active: true });
         updateIcon();
     } else {
        console.log("Could not find Gmail tab. Creating one...");
        chrome.tabs.create({ url: getGmailUrl() });
         updateIcon();
     } 
     });
    }

   if (chrome.runtime && chrome.runtime.onStartup) {
   chrome.runtime.onStartup.addListener(function() {
   updateIcon();
   });
   } else {
   chrome.windows.onCreated.addListener(function() {
   updateIcon();
   });
  }
  function updateIcon(){

  var req = new XMLHttpRequest();
  req.addEventListener("readystatechange", function() {
  if (req.readyState == 4) {
    if (req.status == 200) {
        localStorage.item=req.responseText;

        if(localStorage.item==1){
          chrome.browserAction.setIcon({path:"calpine_logged_in.png"});
          chrome.browserAction.setBadgeBackgroundColor({color:[190, 190, 190, 230]});
          chrome.browserAction.setBadgeText({text:""});   
        }
        else{
        chrome.browserAction.setIcon({path:"calpine_not_logged_in.png"});
        chrome.browserAction.setBadgeBackgroundColor({color:[190, 190, 190, 230]});
        chrome.browserAction.setBadgeText({text:""}); 
        }

    } else {
        // Handle the error
        alert("ERROR: status code " + req.status);
    }
    }
   });
   req.open("GET", "http://blog.calpinetech.com/test/index.php", true);
   req.send(null);
   }

这里发生的事情就是当我激活我的扩展时,地址栏附近会出现一个图标。当我点击该图标时,会调用updateIcon(),它会读取一个名为index.php的服务器文件并检索index.php的输出,并根据该输出,设置图标的颜色。现在我需要的是,没有点击图标本身,(即,当激活扩展时)所有上述功能应该执行这意味着当扩展程序处于活动状态时,它应检查是否为我的网站打开了任何标签,如果是,则必须相应地更改图标颜色。请任何人帮助我。我该怎么办?

这是我的manifest.json

{
"name": "Calpine Extension",
"version": "1.0",
"description": "Log on to calpinemate",
"manifest_version": 2,
"browser_action": {
    "default_icon": "icon_128.png"
},
"background": {
    "persistent": false,
    "scripts": ["background.js"]
},

"browser_action": {
    "default_title": "Test Extension",
    "default_icon": "calpine_not_logged_in.png"
},
"permissions": [

  "*://blog.calpinetech.com/test/index.php",
   "alarms",
   "notifications"
  ]

  }

1 个答案:

答案 0 :(得分:0)

我自己得到了答案..

chrome.runtime.onInstalled.addListener(updateIcon);必须在chrome.browserAction.onClicked.addListener(gotopage)之前调用;