0

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を取得する方法を考えています。または、ダイアログウィンドウと背景ページの間で通信するための他のより良い方法はありますか?

どうもありがとう!

4

1 に答える 1

1

背景ページはtabIdタブではないため、はありません。

バックグラウンドページにメッセージを送信するには、chrome.extension.sendRequestextensionの代わりにtabs)を使用します。

PS。完全なデモ

于 2012-04-30T10:29:44.197 に答える