2012-04-29 114 views
0

我正在編寫一個Chrome擴展程序,其中有一個類似對話框的窗口讓用戶輸入用戶名和密碼,然後將其發送回後臺頁面OAuth 2.0中對令牌的請求。無法獲取Chrome擴展程序中的後臺頁面的標籤ID

要發送的對話窗口中的用戶名和密碼恢復到後臺頁面,我用下面的代碼(在對話窗口.html文件內):其中window.dialogArguments應該是標籤ID

<script> 
function usrpwd(){ 
    var up = {}; 
    up.usr = document.login_form.usr.value; 
    up.pwd = document.login_form.pwd.value; 
    chrome.tabs.sendRequest(window.dialogArguments,up); 
    window.close(); 
} 
</script> 

的分機的背景頁面。

和對話窗口在後臺頁面通過

chrome.contextMenus.create({ 
    "title" : "show Modal Dialog", 
    "contexts" : ["all", "page"], 
    "onclick": handle_click 
}); 

function handle_click(){ 
    chrome.tabs.getSelected(null, function(tab){ 
     console.log('tab ', tab); 
     window.showModalDialog("login_popup.html", tab.id, "dialogHeight:300px; dialogLeft:200px;"); 
    }); 
} 

tab.id打開被認爲是後臺頁面的ID,它會被傳遞到對話窗口並分配給window.dialogArguments

而且在後臺頁面,用戶名和密碼被接受,

chrome.extension.onRequest.addListener(
    function(request){ 
     console.log("Username: ", request.usr); 
     console.log("Username: ", request.pwd); 
    } 
); 

然而,console.log('tab ', tab)handle_click函數內部總是表明getSelected選項卡中,得到了點擊上下文菜單中的選項卡,而不是背景頁面。所以我想知道如何在這種情況下獲得背景頁面的標籤ID。或者還有其他更好的方法來在對話框窗口和背景頁面之間進行通信嗎?

非常感謝!

+0

我應該使用localstorage嗎? – chaohuang

回答

1

背景頁面沒有tabId,因爲它們不是標籤。

要發送消息到後臺頁面,請使用chrome.extension.sendRequestextension而不是tabs)。

PS。 Full demo

+0

嗨,羅布,還有一個問題。現在我可以使用'chrome.extension.getBackgroundPage'將對話窗口中的用戶名和密碼(通過'window.showModalDialog'打開)發送回後臺頁面,但是我必須輸入並提交用戶名和密碼TWICE關閉對話窗口。我不知道有什麼問題。 dialog.html是[here](http://jsfiddle.net/dQkYX/2/)。謝謝! – chaohuang

+0

@ chaohuang按Ctrl + Shift + J打開控制檯,檢查是否有奇怪的事情發生。您也可以使用['chrome.extension.sendRequest'](http://code.google.com/chrome/extensions/extension.html#method-sendRequest)來代替使​​用'window.close()',並使用提供的'sender.tab.id'使用['chrome.tabs.remove']關閉它(http://code.google.com/chrome/extensions/tabs.html#method-remove)。 –

+0

我用'chrome.tabs.create'來代替'window.showModalDialog',然後沒有問題。我想在Chrome中有一些關於'window.showModalDialog'的錯誤。感謝您的耐心幫助。我很感激。 – chaohuang

相關問題