1

リモート Web サイトにログイン フォームを実装する Firefox 拡張機能を構築しようとしています。基本的に、アドレスバーの近くにある拡張機能のアイコンをクリックすると、拡張機能がポップアップを開きます。このモジュールを使用して実現したポップアップ動作

https://github.com/Rob--W/browser-action-jplib

初めてjavascriptログインスクリプトを作成しようとしたとき、main.jsではなくデータスクリプトでリモートWebサイトへのajax呼び出しを実装しました。私が読んだことから、ajax呼び出しはデータスクリプトでサポートされておらず、main.jsのリクエストモジュールを使用して作成する必要があるため、このソリューションは間違っていました。これを受けて、main.js で request モジュールを使用し、次のコードを作成しました。

data.js(ポップアップで使用される data フォルダ内のスクリプト)

 extension.sendMessage(
         {
              action:"login",
              data:{user:user,password:password}
         },function(r){
    //Handle server response. If ok show post login screen if not show invalid credentials.
  });

主要。js

var popup = badge.BrowserAction({
    default_icon: data.url("icon.png"),    
    default_popup: data.url("popup.html")      
}) 

popup.onMessage.addListener(function(message, sender, sendResponse) {

      if(message.action == 'login'){
             sendResponse(login(message.data));
      } 
});
function login(data  ){ 

    var ret;
    login = Request({
          url: url,
          content:data, 
          onComplete: function (response) {   
                ret = response.json;
          }
    });
    login.get();

        return ret;
}

リクエストは非同期であるため、null レスポンスが data.js に返されます。リクエストモジュールのドキュメントを調べましたが、これに対する解決策が見つかりませんでした。

誰かがこの問題を解決するための解決策を持っているか知っていますか?

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

4

1 に答える 1

0

実際には非常に簡単sendResponseです。応答があるまで電話しないでください。sendResponse関数をコールバックとして関数に渡すことができますlogin

popup.onMessage.addListener(function(message, sender, sendResponse) {
      if(message.action == 'login'){
             login(message.data, sendResponse);
      }
      return true;
});
function login(data, callback){
  ...
  onComplete: function(response) {
    callback(response.json);
  }
  ...
}
于 2013-10-27T08:41:49.867 に答える