2011-05-17 199 views
1

我已经得到了我popup.html登录表单它调用下面的函数...Chrome扩展程序:popup.html在新选项卡中关闭并打开响应?

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

这个功能又转到我background.html以下switch语句..

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

以下是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); 

编辑

的最后一个错误收到background.html抛出看来.. Attempting to use a disconnected port object

完整跟踪是...

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 

回答

0

将在弹出的代码和数据是短暂的,因为只要弹出窗口关闭,关联的代码就会关闭,因此,后台页面弹出将失败(没有什么可以回叫)。

你需要找到什么是打开新的页面(不是所有代码都包含在这个问题 - 是什么createContentMenu做)。桌面通知可能会导致您失去焦点并因此可能会关闭弹出窗口。

此外,请确保你在弹出窗口中提交表单,然后通过XMLHttpRequest(或使用嵌入式imframe托管表单)传递请求,因为在弹出窗体中提交表单不会像你想象的那样工作页面不会在弹出窗口内更新)。

相关问题