2011-05-17 124 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託管表單)傳遞請求,因爲在彈出窗體中提交表單不會像你想象的那樣工作頁面不會在彈出窗口內更新)。

相關問題