2012-04-29 10 views
0

私はChrome拡張機能を作成しています。ユーザにはユーザー名とパスワードを入力できるダイアログウィンドウがあり、これをバックグラウンドページに戻して送信しますOAuth 2.0でのトークンのリクエストChrome拡張機能のバックグラウンドページのタブIDを取得できません

<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であると考えられる。

背景ページに戻って、ダイアログウィンドウからユーザ名とパスワードを送信するために、私は(ダイアログウィンドウの.htmlファイル内の)次のコードを使用しました拡張機能の背景ページのダイアログウィンドウが

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); 
    } 
); 

は、handle_click関数内console.log('tab ', tab)は常にgetSelected]タブには、コンテキストメニューをクリックしまったタブ、ではないことを示しています背景ページ。だから私はこの場合にバックグラウンドページのタブIDを取得する方法が不思議です。または、ダイアログウィンドウとバックグラウンドページ間で通信するための他の優れた方法はありますか?

ありがとうございます!

+0

localstorageを使用する必要がありますか? – chaohuang

答えて

1

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

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

PS。 Full demo

+0

こんにちは、ロブ、もう1つ質問です。今度は 'chrome.extension.getBackgroundPage'を使ってダイアログボックスウィンドウ(' window.showModalDialog'で開く)からバックグラウンドページにユーザ名とパスワードを送ることができますが、ユーザ名とパスワードを入力してTWICEに送信しなければなりませんダイアログウィンドウを閉じます。私は何が問題なのか分からない。 dialog.htmlは[ここ](http://jsfiddle.net/dQkYX/2/)です。ありがとうございました! – chaohuang

+0

@chaohuang Ctrl + Shift + Jを押してコンソールを開き、奇妙なことが起こっているかどうかを確認します。 'window.close()'の代わりに['chrome.extension.sendRequest'](http://code.google.com/chrome/extensions/extension.html#method-sendRequest)を使用して、 ['chrome.tabs.remove'](http://code.google.com/chrome/extensions/tabs.html#method-remove)を使用してそれを閉じるために提供された' sender.tab.id'。 –

+0

'chrome.tabs.create'を使って' window.showModalDialog'を置き換えました。問題はありません。私はクロムの 'window.showModalDialog'に関するいくつかのバグがあると思います。あなたの患者の助けに感謝します。それは有り難いです。 – chaohuang

関連する問題