我正在写一个扩展程序,我需要检查用户是否已登录页面。单击图标后,扩展程序将打开一个新的选项卡,指向指定的网址。如果用户未登录,则站点会将他们重定向到/ login /页面。页面加载后,我尝试读取currentURL是否与登录页面的URL匹配。如果可以,我知道他们需要登录,然后通知他们。我的问题是,使用查询扩展名时,检索不到的不是活动选项卡的URL,而是该选项卡最初发送到的URL。
background.js
chrome.browserAction.onClicked.addListener(function(activeTab){
// Attempt to open Karmalicity get points page
var getPoints = "http://www.karmalicity.com/get-points/";
chrome.tabs.create({ url: getPoints });
// Check if the user is logged in
var checkLog = "https://www.karmalicity.com/login/";
var currentURL;
setTimeout(function(){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
currentURL = tabs[0].url;
});
var check = checkLog.localeCompare(currentURL)
if (check == 0){
// If returns 0, user is not logged in
alert("You need to be logged in to utilize this application!");
}else {
// User is logged in
alert("Returned with " + check + ". Should be zero for testing.");
}
}, 1000);
});
即使实际选项卡位于/ login /,扩展名也将返回/ get-points /。
我的权限包括tab和activeTab。获取网址的正确方法是什么?
编辑 我已将url检查放入超时中,因此现在已解决该问题。但是,它似乎仍然无法正确检查。比较字符串时,我返回的是-1。
答案 0 :(得分:0)
我找到了解决方案。我没有通过比较字符串来检查两个变量,而是测试了URL是否包含关键字“ login”。通过这样做,我还可以简化代码。
chrome.browserAction.onClicked.addListener(function(activeTab){
// Attempt to open Karmalicity get points page
var getPoints = "http://www.karmalicity.com/get-points/";
chrome.tabs.create({ url: getPoints });
// Check if the user is logged in
var check;
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
check = (tabs[0].url).includes('login');
if (check == true){
// If returns true, user is not logged in
alert("You need to be logged in to utilize this application!");
}else {
// User is logged in
alert("Logged in.");
}
});
});
此外,通过消除超时,我可以防止功能混乱而导致任何潜在的错误。