0

我有一个脚本查找cookie以确定用户是否有网站的活动会话。基于这些信息,它显示了适当的弹出html页面。我希望它在每次单击扩展图标时运行,但似乎只运行一次。我想我可能会错过一些东西。触发问题chrome.browserAction.onClicked.addListener

任何帮助,将不胜感激

cookieChecker.js

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; 
    } 
}); 

的manifest.json

{ 
    "manifest_version": 2, 

    "name": "Getting started example", 
    "description": "This extension shows a Google Image search result for the current page", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "permissions": [ 
"activeTab", 
"cookies", 
"storage", 
"https://ajax.googleapis.com/", 
"https://somesite.com" 
    ], 
    "background": { 
    "scripts": ["jwt-decode.min.js","cookieChecker.js"] 
    } 
} 
+0

@wOxxOm的事情是,我希望脚本能够查询我网站的cookie,而不管当前的'tab.url'是什么。这不能做到吗? – Hamed

回答

1

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

如果你想返回到接收代码browserAction.onClicked活动,其他地方(在例如弹出的JavaScript),你将需要弹出设置为''

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

Omg非常感谢你!我在JavaScript文件中为我的loggedIn.html和loggedOut.html设置弹出窗口为'''',它的工作原理!但是,现在只需点击两下按钮即可显示弹出窗口。第一次点击什么也不做,第二次点击显示弹出。任何想法为什么会发生这种情况? – Hamed

+0

这是预期的。在您定义弹出窗口的时候已经发生了将打开弹出窗口的用户交互。定义弹出窗口将会打开所有*随后的*点击。没有编程方式来打开实际的弹出窗口。然而,你可以[打开一个看起来像弹出窗口的东西,并像一个行为](http://stackoverflow.com/a/40296092/3773011)。我需要稍微加强一下这些代码,并将其移至以编程方式打开弹出窗口的问题之一。尽管问题的答案在于标记为firefox-webextensions,但我确实在Chrome上测试了代码。 – Makyen