无法获取Chrome扩展程序中背景页面的标签ID

时间:2012-04-29 23:03:06

标签: dialog google-chrome-extension

我正在编写一个Chrome扩展程序,其中有一个类似对话框的窗口,允许用户输入用户名和密码,然后将其发送回后台页面,以便在OAuth 2.0中请求令牌。

要将对话框窗口中的用户名和密码发送回背景页面,我使用了以下代码(在对话框窗口.html文件中):

<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>

其中window.dialogArguments应该是扩展程序背景页的标签ID。

然后通过

在后台页面打开对话框窗口
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。或者是否有更好的方法在对话窗口和背景页面之间进行通信?

非常感谢!

1 个答案:

答案 0 :(得分:1)

后台网页没有tabId,因为它们不是标签页。

要向背景页面发送消息,请使用chrome.extension.sendRequestextension代替tabs)。

PS。 Full demo