触发chrome.browserAction.onClicked.addListener的问题

时间:2017-02-28 21:48:42

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

我有一个脚本,用于查找cookie以确定用户是否具有网站的活动会话。根据此信息,它显示相应的弹出HTML页面。我想在每次点击扩展图标时运行它,但它似乎只运行一次。我想我可能会遗漏一些东西。

cookieChecker.js

<connection-customization class='bigquery' enabled='true' version='10.0' >
      <vendor name='bigquery' />
      <driver name='bigquery' />
      <customizations>
                  <customization name='connection-dialect' value='google-bql' />
      </customizations>
</connection-customization>

的manifest.json

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.cookies.get({url: 'https://somesite.com', name: 'TOKEN'}, function(cookie) {
  if (cookie) {
   console.log('Cookie', cookie);
   var decoded = jwt_decode(cookie.value);
   var expired = isExpired(decoded);
   if (expired === false) {
    chrome.browserAction.setPopup({popup: 'loggedIn.html'});
      }
   else {
        chrome.browserAction.setPopup({popup: 'loggedOut.html'});
      }
    }
  else {
      chrome.browserAction.setPopup({popup: 'loggedOut.html'});
    }
  })

  function isExpired(token) {
    var date = getExpirationDate(token);
    if (date < (Date.now() / 1000)) {
      console.log(date, Date.now());
      return true;
    }
    return false;
  }

  function getExpirationDate(token){
    if (!token.exp) {
      return null;
    }
    var expDate = token.exp;
    return expDate;
  }
});

1 个答案:

答案 0 :(得分:2)

如果没有为浏览器操作按钮定义弹出窗口,则仅会触发事件browserAction.onClicked。使用browserAction.setPopup({popup:...(或者如果您在 manifest.json 中定义了default_popup)为弹出窗口设置页面后,browserAction.onClicked事件将不会触发任何后续用户点击浏览器操作按钮。相反,当单击浏览器操作按钮时,将打开您的弹出窗口。

如果您想要在代码中的其他位置(例如在弹出窗口的JavaScript中)返回接收browserAction.onClicked个事件,则需要将弹出窗口设置为''

chrome.browserAction.setPopup({popup: ''});