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