0

我正在编写一个 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。或者有没有其他更好的方式在对话窗口和背景页面之间进行通信?

非常感谢!

4

1 回答 1

1

背景页面没有tabId,因为它们不是选项卡。

要将消息发送到后台页面,请使用chrome.extension.sendRequest(extension而不是tabs)。

PS。完整演示

于 2012-04-30T10:29:44.197 回答