Chrome API未在嵌套回调中注入cookie

Chrome API not injecting cookies in nested callback

本文关键字:注入 cookie 回调 嵌套 API Chrome      更新时间:2024-03-30

我正在构建一个应用程序,该应用程序需要通过扩展将cookie注入googlechrome。我遇到的问题似乎是我对javascript回调理解的失误。我有以下。。

编辑:更简单的例子仍然不起作用。

    $scope.selectAccount = function(account)
    {
        $scope.account = account;
        setProxy(account.proxy.ip,account.proxy.port);
        armProxyAuth(account.proxy);
        chrome.windows.create({"url": "http://facebook.com", "incognito": true},function(window){
            chrome.cookies.getAllCookieStores(function(stores){
                bg.console.log('echo stores?');
                bg.console.log(stores);
                for(var i =0;i<stores.length;i++){
                    bg.console.log(stores[i].tabIds);
                    bg.console.log(window.tabs[0].id);
                    if(stores[i].tabIds[0]==window.tabs[0].id)
                    {
                        chrome.cookies.set({
                            "name": "xs", //secure, http only
                            "url":"https://www.facebook.com",
                            "httpOnly": true,
                            "domain":"www.facebook.com",
                            "secure": true,
                            "value": account.cookies.xs
                        },function (cookie) {
                            bg.console.log('cookie set');
                            bg.console.log(JSON.stringify(cookie));
                        });
                        chrome.cookies.set({
                            "name": "c_user", //secure
                            "url":"https://www.facebook.com",
                            "secure": true,
                            "httpOnly": false,
                            "value": account.cookies.c_user
                        },function (cookie) {
                            bg.console.log('cookie 2 set');
                            bg.console.log(JSON.stringify(cookie));
                        });
                    }
                }
            });
        });
    };

这做了我所期望的一切,除了实际的addCookies部分,cookies从未被添加,也没有抛出错误。我还发现,有时chrome.cookies.getAllCookiesStores回调也从未被触发,它在执行的内容上非常不一致,我似乎找不到任何韵律或原因。

当我进行以下时

 $scope.selectAccount = function(account)
 {
        $scope.account = account;
        addCookies(account.cookies);
 }

Cookie已加载,没有问题。我不确定我的javascript、chrome API或其他什么东西是否出现了故障。如果有人能对它有所启发,那就太好了。

当使用真正的"回调"从另一个函数调用函数时,例如在setTimeout$.ajax()中,调用该函数时不带参数,其作用域是环境的最大作用域,通常是window对象(少数例外)。

您不能将account.cookies传递到addCookies中,因为第6行上的function(window){是一个回调函数,并且在其作用域中丢失了account变量。

此外,当您将function(stores){作为chrome.cookies.getAllCookieStores(的回调时,您将再次将内部函数的作用域重置为没有account变量的作用域。

因此,当传递到addCookies时,account.cookies相当于仅调用addCookies本身,因为account.cookiesaccount本身是您正在调用addCookies的范围中的undefined