我正在尝试使用内容脚本互动创建一个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')
}
答案 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值不会被重置,除非您在其他地方执行此操作。