2012-02-21 14 views
2

FacebookのデータにアクセスするFirefoxプラグインを作成しようとしています。 今アクセストークンを取得する方法がわかりません。 デスクトップアプリケーション用のクライアントサイドフロー(固定リダイレクトuriを使用)を実装しようとしましたが、そこで遭遇する大きな問題は、リダイレクトが発生するのをJavaScriptが待たせないことです。 どのようにこれを行うことができますか?Firefoxプラグインでfacebookユーザーを認証する

私が理解している限り、私はウェブページを持っていないので、JavaScript APIはあまり役に立ちませんか?

+0

:?あなたはAdd-on SDKを使用する場合は、タブにこれらの線に沿って何かをreadyイベントリスナーを添付することができますか[アドオンSDK](https://addons.mozilla.org/en-US/developers/docs/sdk/1.4/)または古典的なXULベースの拡張機能ですか? –

+0

facebookで提供されている[JavaScript SDK](https://developers.facebook.com/docs/reference/javascript/)を意味します。 – wiseveri

+0

いいえ、JavaScript SDKはあまり役に立たないので、拡張機能にセキュリティの意味。 –

答えて

3

ブラウザのタブでhttps://www.facebook.com/dialog/oauthを開いて、ユーザーがログインしてアクセスできるようにしていると思います。実際のリダイレクトURLをここに渡す必要はありません。http://my.extension.local/のように、うまく動作しないものを使用することができます。次に、タブがそのURLにリダイレクトされるタイミングを検出するだけです。従来の拡張機能を使用している場合は、そのタブの<browser>要素にprogress listenerを登録してonLocationChange()の呼び出しを参照してください。http://my.extension.local/で始まる場所が表示されたら、要求をキャンセルしてタブを閉じることができます。あなたは「JavaScriptのAPI」とはどういう意味ですか

var tabs = require("tabs"); 
tabs.open({ 
    url: "https://www.facebook.com/dialog/oauth?...", 
    inBackground: false, 
    onReady: function(tab) 
    { 
    if (tab.url.indexOf("http://my.extension.local/") == 0) 
    { 
     ... 
    } 
    } 
}); 
+0

私は通常の拡張機能を持っていて、それを試しました: 'var facebook = { init:function(){ \t var app_id = 'MY APP ID'; \t var redirect_uri = 'fb.com/login_success' var url = 'https://www.facebook.com/dialog/oauth?...' \t \t \t window.open(url); \t \t \t window.addEventListener( "負荷"、関数(){ \t \t \t \t \t browser.addProgressListener(fbListener、Components.interfaces.nsIWebProgress.NOTIFY_LOCATION); \t \t \t \t}、偽)。 \t \t} };しかし、コードは決して呼び出されません。私はまた、ページの読み込みだけでリッスンしようとしましたが、どちらもうまくいきませんでした。 – wiseveri

+0

@wiseveri:新しいウィンドウを開いていますが、参照を保持していません。代わりに、あなたがいるウィンドウの "load"イベントを待ち受けます(ウィンドウが既にロードされているので、もちろん起こりません)。そのイベントが仮想的に起動すると、もちろんどこでも定義されていない 'browser'という変数にアクセスしようとしています。 Heh ... –

+0

まさに...その変更: 'var myWindow = window.open(url); myWindow.addEventListener( 'load'、function(){gBrowser.addProgressListener(myListener);}、false);新しいウィンドウの「」要素にアクセスするにはどうすればよいですか?私の方法は明らかに機能しません。プログレスリスナーとブラウザ要素のページはいずれも役に立ちませんでした – wiseveri

関連する問題