Chrome拡張機能を作成しています。この拡張機能には、ユーザーがユーザー名とパスワードを入力できるダイアログのようなウィンドウがあり、OAuth2.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を取得する方法を考えています。または、ダイアログウィンドウと背景ページの間で通信するための他のより良い方法はありますか?
どうもありがとう!