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

时间:2014-01-27 19:45:28

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

我正在尝试使用内容脚本互动创建一个Chrome扩展程序。我在浏览器操作方案中遇到一个问题。我试图在谷歌搜索解决方案,但徒劳无功。

以下是该方案。

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

比如说,如果我想尝试验证用户是否登录了gmail。第一次如果用户没有登录,我需要在点击扩展图标时显示弹出消息“请登录”。如果用户已经登录,那么我会将其存储在本地存储中,因此如果用户再次点击图标而不是显示弹出窗口需要联系内容脚本。

请建议。

编辑:在此更新我的代码

在background.js中

。 (问题是它没有进入else部分。总是它显示popup尽管它有本地存储值)

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

2 个答案:

答案 0 :(得分:1)

当browserAction.onClicked事件已有弹出窗口时,它不会触发。

答案 1 :(得分:0)

目前还不完全清楚你需要什么帮助,所以我根据你的问题的措辞猜测你需要逻辑或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值不会被重置,除非您在其他地方执行此操作。