2009-08-01 13 views
2

TwitterのOAuth機能を使用しようとしているWebアプリケーションがあります。このアプリケーションには、ユーザーにTwitter資格情報の入力を求めるリンクがあります。ユーザーがこのリンクをクリックすると、JavaScriptを介して新しいウィンドウが開きます。このウィンドウはダイアログとして機能します。これは、のように実現されます。JavaScript - クロスサイトスクリプティング - 許可が拒否されました

メインページ:

<div id="promptDiv"><a href="#" onclick="launchDialog('twitter/prompt.aspx');">Provide Credentials</a></div> 

...

function launchDialog(url) { 
    var specs = "location=0,menubar=0,status=0,titlebar=0,toolbar=0"; 
    var dialogWindow = window.open(url, "dialog", specs, true); 
} 

は、ユーザーがリンクをクリックすると、それらはprompt.aspxページからTwitterのサイトにリダイレクトされます。 Twitterサイトでは、ユーザーは自分のTwitter資格情報を入力するオプションを持っています。資格情報を提供すると、自分のサイトにリダイレクトされます。これは、Twitterのサイト上のアプリケーションに設定できるコールバックURLを通じて実現されます。

コールバックが発生すると、ユーザーはダイアログウィンドウの自分のサイトの "/twitter/confirm.aspx"にリダイレクトされます。この場合、私は "promptDiv"の内容を更新して、 "あなたは正常にTwitterに接続しました"と言い、リンクを置き換えてダイアログを閉じます。これは、このステップを正常に完了したことをユーザーに通知する目的に役立ちます。私は正常にダイアログウィンドウを閉じることができます。しかし、HTML DOMを更新しようとすると、「エラー:許可が拒否され、プロパティWindow.documentを取得できません」というエラーが表示されます。 HTML DOMを更新しようとする試みで、私は「/twitter/confirm.aspx」で次のスクリプトを使用してみました:

// Error is thrown on the first line. 
var confirmDiv = window.opener.document.getElementById("confirmDiv"); 
if (confirmDiv != null) 
{ 
    // Update the contents 
}     
window.close(); 

私は、ちょうど私もDOM経由にアクセスできるかどうかを確認するためにHTMLを読み込むしようとしました次のスクリプト:

alert(window.opener.document.body.innerHTML); 

私がこれを試みたとき、私はまだ "Permission denied"エラーが出ています。私はこれがクロスサイトスクリプティングと関係があることを知っています。しかし、私はそれを解決する方法を知らない。この問題を解決するにはどうすればよいですか?アプリケーションを正しく構成していないのですか?ユーザーが自分のサイトにリダイレクトされた後にHTML DOMを更新するにはどうすればよいですか?

ありがとうございました!

+1

「場所= 0、メニューバー= 0、ステータス= 0、タイトルバー= 0、ツールバー= 0」「あなたは実際に私がTwitterのサイトにいることを確認するあらゆる方法を隠しています。 。私はこのような「ダイアログ」を信頼して、自分の資格情報を入力することはまずありません。 –

答えて

1

ポップアップがTwitterの認証ページを開くと、ドキュメントドメインが変更され、window.openerがリセットされているため、元のwinodwとの通信が失われてしまいます。

SitePenのNetFlix Queuedでこれを回避するには、タイマーを使用してポップアップウィンドウをポーリングしてその場所の変更を確認してください。エラーページや成功ページに行った場合、私はそれを知っていて、ポップアップを閉じることができました(ウィンドウは制御できますが、DOMは制御できません)。メインページの内容を変更して承認のステータスを反映させます。

また、ユーザーがポップアップを承認して閉じていない場合、ウィンドウが閉じているかどうかを確認しました。

これはAdobe AIRで行われたコールバックを使用できませんでした。また、「コールバック」するサーバーがなく、余分なハードルが生じました。

+0

私もこれを試していました。しかし、私はまだ、ウィンドウオブジェクトのlocationプロパティにアクセスしようとしたときにパーミッションが拒否されました。 – Villager

+0

@Villager;あなたは**あなたが**頻繁に開いたウィンドウのURLをチェックするオリジナルの**ページにクリックハンドラのロジックを追加する必要があることを意味します。 urlが '' /twitter/confirm.aspx ''に変更されたことを検出すると、自身を更新する必要があります。理にかなっている? –

関連する問題