首页 > 解决方案 > 谷歌浏览器扩展:在 background.js 中获取 cookie 并将响应发送到 content.js

问题描述

我的扩展程序将通知添加到第三方网站。从这个通知中,我应该检查用户是否登录了我们的网站。我想从 background.js 中的 cookie 中检查 userId 并将消息发送到 content.js。我需要知道 cookie 是否为空( chrome.cookies.get 不能从 content.js 获得)。

https://developer.chrome.com/extensions/messaging的简单响应非常有效。并且 chrome.cookies.get 可以单独工作。但是当我尝试使用 get.cookies 添加条件时,出现了问题。我猜是因为 scoupe/context 或回调麻烦。

背景.js

Chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
        if (request.greeting == "hello") {
            var ID;

            function getCookies(domain, name) {
                chrome.cookies.get({"url": domain, "name": name}, function (cookie) {
                    ID = cookie.value;
                    showId();
                });
            }

            function showId() {
                if (ID) {
                    sendResponse({farewell: "logged"});
                }
                ;
            }

            getCookies(baseUrl, COOKIE_KEY_USER_ID);
        }
    }
);

内容.js

$(notify).find('[data-act]').on('click', function (e) {
    e.preventDefault();

    chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
        if (response && response.farewell == "logged") {
            activateFromNotify();
        } else {
            // 'not logged'
            $('.wrapper').html(showlogin);
        };
    });

});

看起来在 background.js 中它没有在另一个函数或回调中看到 sendResponse。有什么办法可以解决吗?

更新:更改了 background.js 中的结构,它工作正常:

 browserObj.runtime.onMessage.addListener(
            function(request, sender, sendResponse) {
                if (request.greeting == "hello"){
                    checkUserLogin(request, sender, sendResponse);
                };
                return true;
            });

        function checkUserLogin(request, sender, sendResponse){
            var resp = sendResponse;
            browserObj.cookies.get({'url': baseUrl, 'name': COOKIE_KEY_USER_ID}, function (cookie) {
                        var userId = cookie && cookie.value ? cookie.value : 0;


                resp({farewell: userId});


            });

        }

标签: javascriptgoogle-chrome-extensioncallback

解决方案


推荐阅读