在Chrome扩展浏览器操作中需要两个动作



我正在尝试使用内容脚本交互创建一个Chrome扩展。我在浏览器动作方案中面临一个问题。我试图在Google中搜索解决方案,但徒劳无功。

这是场景。

单击Chrome扩展图标(浏览器操作)时,我想要两个不同的动作。如果我在本地存储中存储了一些密钥,则需要向内容脚本发送消息,我需要显示弹出窗口。

说一个例子,如果假设我试图验证用户是否已登录Gmail。在第一次单击扩展图标时,如果用户未登录,我需要显示带有消息"请登录"的弹出窗口。如果用户已经登录,那么我将将其存储在本地存储中,因此,如果用户再次单击图标,而不是显示弹出窗口需要联系内容脚本。

请建议。

编辑:在此处更新我的代码

在后台。(问题是它不会进入其他部分。始终显示弹出事件,即使它具有本地存储值)

if(localStorage.accessToken=="" || localStorage.accessToken==undefined){
      chrome.browserAction.setPopup({
            popup : "popup.html"
       })
}else{
    chrome.browserAction.onClicked.addListener(function(e){
        chrome.tabs.query({active: true, currentWindow: true},function(tabs)
        {
            chrome.tabs.sendMessage(tabs[0].id,{accesskey:localStorage.accessToken},function(response) {});
        });
    })
    console.log('already logged in')
}

browseraction.solicked事件在已经有弹出窗口时不会发射。

尚不完全清楚您在这里需要的帮助,所以我猜想您的问题的措辞,您需要在逻辑或localstorage方面需要帮助。

我对Chrome扩展图标上的事件不了解,但是假设您可以得到该事件,那么您的代码应该看起来像以下内容:

// this code goes inside your icon click handler
if (localStorage.loggedIn === 'loggedIn') {
    // do whatever action you want to happen if the user is logged in
} else {
    if (/* check to see if logged in goes here*/) {
        // user is logged in so store value so you don't have to check again
        localStorage.loggedIn = 'loggedIn';
    } else {
        localStorage.clear('loggedIn');
        alert("Please login to gmail first")
    }
}

当然,此代码可以执行您的要求,但是它无法处理用户单击按钮,登录的情况,然后在以后的某个点登录并再次单击按钮。在这种情况下,localstorage值不会重置,除非您在其他地方进行。

最新更新