Расширение Chrome: popup.html закрывает и открывает ответ в новой вкладке? - PullRequest
1 голос
/ 17 мая 2011

У меня есть форма входа в мой popup.html, которая вызывает следующую функцию ...

 chrome.extension.sendRequest({
        req: "login",
        user: username,
        pass: pass,
        remember: remember
    }, function(response) {
        console.log("RESPONSE RECIEVED HOOORAH!");
            });

эта функция, в свою очередь, переходит к следующему оператору switch в моем background.html ..

do_login(request.user, request.pass, request.remember, false, true, function(response){
                        if(response == true){
                            sendResponse("success");
                        }else{
                            sendResponse("badLogin");
                        }
                    })

ниже приводится содержание do_login.Во время выполнения do login мой popup.html случайно закрывается и снова открывается на новой вкладке, код завершается там, и я вошел в систему. Почему это происходит?

 var xhr = new XMLHttpRequest();
    xhr.open("GET",requrl,true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
    xhr.onreadystatechange = function(do_login){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                console.log(xhr.responseText);
                try{
                    //Incase they were just logged in as another user.
                    createContextMenu();
                    //users info.
                    var resp = JSON.parse(xhr.responseText);
                    if(resp.default === void(0)){
                        logOut();
                        callback(null);
                    }
                default = resp.default;

                for(var i=0;i<resp.s.length;i++){
                globalStaks[i] = resp.s[i];
                }
                st = global;
                bud = resp.bud;
                msg = resp.msg;
                stakid = resp.default;
                }catch(x){
                // This situation is where you have incorrect password
                console.log("something is wrong with logging in ")
                clearLoginInfo();
                console.log("Incorrect password");
                }
                if(resp.msg == "denied")
    {
        clearLoginInfo();
        callback(false);
    }
    else
    {
        loggedIn = true;
        user = username;
        userid = resp.userid;
        if(refresh){
            refreshpage();
        }
        if(notificationdisplay){
            notification.cancel();
        }
        if(remember)
        {
            clearLoginInfo();
            storeLogin(username,pass);
        }
        localStorage.setItem("pass",pass);
        md5 = pass;
        callback(true);
        }
        }else {
            callback(false);
        }
    }
}
        xhr.send(null);

EDIT

Появляется как последняя полученная ошибка background.html бросков .. Attempting to use a disconnected port object

полный след ... ... 1019 *

 Uncaught Error: Attempting to use a disconnected port object
 chrome.Port.postMessagechrome/RendererExtensionBindings:147
 chromeHidden.Port.dispatchOnConnect.connectEventchrome/RendererExtensionBindings:89
 sendResponse.reply background.html:1266
 xhr.onreadystatechange

1 Ответ

0 голосов
/ 17 мая 2011

Код и данные во всплывающем окне эфемерны, так как, как только всплывающее окно закрывается, связанный с ним код закрывается, поэтому любой обратный вызов, скажем, от фоновой страницы до всплывающего окна, будет неудачным (нет ничего, к чему можно было бы вернуться) .

Вам нужно найти, что открывает новую страницу (не весь ваш код включен в вопрос - что делает createContentMenu?). Уведомления на рабочем столе могут привести к потере фокуса и, следовательно, к закрытию всплывающего окна.

Также убедитесь, что вы перехватываете отправку формы во всплывающем окне, а затем пропускаете запрос через XMLHttpRequest (или используете встроенный фрейм для размещения формы), так как отправка формы во всплывающем окне не работает, как вы думаете (страница не будет обновляться внутри всплывающего окна).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...