2011-07-09 11 views
2

Firefoxの拡張機能で現在のページURLを取得できますが、POSTデータも取得したいと考えています。 Firefoxはどこかに保存して、リフレッシュ時に再び送信します。どのように私の内線からそれを得ることができますか?Firefoxの拡張機能で現在のWebページのPOSTデータを取得

おそらくFirebugのような各リクエストを取り込むことができますが、それを避け、必要に応じてPOSTデータを取得したいと思います。

私はadd-on SDK (jetpack)を使用しています。私は私のメインのスクリプトでthis pageからのコードを試してみました:

{Cc,Ci} = require("chrome"); 

wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); 
mainWindow = wm.getMostRecentWindow("navigator:browser"); 

history = mainWindow.gBrowser.selectedBrowser.webNavigation.sessionHistory; 

postdata = history.getEntryAtIndex(history.index-1,false).QueryInterface(Ci.nsISHEntry).postData; 

postdata.QueryInterface(Ci.nsISeekableStream).seek(Ci.nsISeekableStream.NS_SEEK_SET, 0); 
stream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream); 
stream.setInputStream(postdata); 
postBytes = stream.readByteArray(stream.available()); 
poststr = String.fromCharCode.apply(null, postBytes); 

console.log(poststr); 

しかし、それは

postdata.QueryInterface(Ci.nsISeekableStream).seek(Ci.nsISeekableStream.NS_SEEK_SET, 0); 

ためpostdata is nullTypeError)で失敗しました。

アクティブなタブに添付されているコンテンツスクリプトでもこの方法を試しましたが、許可が拒否されたときにはComponents.classesになります。

+2

これは私にとってうまくいきます( 'mainWindow.gBrowser.selectedBrowser.webNavigation.sessionHistory'を' mainWindow.gBrowser.sessionHistory'に短縮しましたが、そうでなければ同じです)。探している履歴エントリにPOSTデータが関連付けられていることを確認してください。 POSTデータを受け取った後にWebサーバーがリダイレクトすることが多いことに注意してください。その場合、現在の履歴エントリにはPOSTデータはありません(ページをリロードしようとすると警告が表示されません)。 –

+0

現在のページにPOSTデータがあります(リフレッシュしてダイアログが表示されます)。しかし、実際には、このコードは現在のページではなく、最後のページのPOSTデータを取得します。私は '-1'を削除するだけでこれを修正しました。ご協力ありがとうございました。このコードの作業が分かっていれば、多くの助けになりました。 –

答えて

2

このコードは、現在のページではなく、最後のページのPOSTデータを取得します。

history.index-1history.indexに変更して動作します。

+0

ハ! off-by-oneエラーのようなものはありません;) – canuckistani

関連する問題