chrome.tabs.query不返回当前标签页URL作为匹配项?

时间:2018-08-04 21:02:30

标签: javascript google-chrome-extension

我正在写一个扩展程序,我需要检查用户是否已登录页面。单击图标后,扩展程序将打开一个新的选项卡,指向指定的网址。如果用户未登录,则站点会将他们重定向到/ 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。

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.");
        }
    });
});

此外,通过消除超时,我可以防止功能混乱而导致任何潜在的错误。