2014-02-25 23 views
0

我已經寫下了下面的代碼。但是,有時這種方式有效,有時會循環,有時甚至根本不起作用。我究竟做錯了什麼?擴展應該從網頁趕上消息,重定向,然後推回一個消息的content.js由AddListener引起的循環

chrome.runtime.onMessage.addListener(function(request, sender) { 
    url = request.url; 
    UName = request.username; 
    PWord = request.password; 
    chrome.tabs.update(sender.tab.id, {url: request.redirect}); 
    chrome.tabs.onUpdated.addListener(function doStuff(request) { 
     chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
      chrome.tabs.sendMessage(tabs[0].id, {message: "hello", username: UName, password: PWord}, function(response) {}); 
      chrome.tabs.onUpdated.removeListener(doStuff); 
      return; 
     }); 
    }); 
}); 

回答

1

啊哈,有一些代碼冗餘,我認爲。
也許,你可以嘗試這樣的:

chrome.runtime.onMessage.addListener(function (request, sender) { 
    var url = request.redirect; 
    var name = request.username; 
    var pwd = request.password; 
    var ti = sender.tab.id; // cache the tabId 

    chrome.tabs.update(ti, {url: url}); 
    chrome.tabs.onUpdated.addListener(function doStuff(tabId, changeInfo, tab) { 
    if (tabId === ti && changeInfo.status === 'complete') { 
     chrome.tabs.onUpdated.removeListener(doStuff); 
     chrome.tabs.sendMessage(tabId, {message: "hello", username: name, password: pwd}, function (callbackData) { 
     // TODO something 
     }); 
    } 
    }); 
}); 

祝你好運!