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