【问题标题】:Firefox addon sdk synchronous requestFirefox 插件 sdk 同步请求
【发布时间】:2013-10-25 21:22:26
【问题描述】:

我正在尝试构建一个将在远程网站上实现登录表单的 Firefox 扩展。基本上,扩展程序将通过单击地址栏附近的扩展程序图标打开一个弹出窗口。我使用这个模块实现的弹出行为

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

当我第一次尝试构建 javascript 登录脚本时,我在一个不在 main.js 中的数据脚本中实现了对远程网站的 ajax 调用。这个解决方案是错误的,因为从我读到的数据脚本中不支持 ajax 调用,我需要使用 main.js 中的请求模块来实现它。考虑到这一点,我在 main.js 中使用了 request 模块并提出了下一个代码:

data.js(弹出窗口中使用的数据文件夹内的脚本)

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

因为请求是异步的,所以我将空响应发送回 data.js。我查看了请求模块文档并没有找到解决方案。

是否有人有或知道解决此问题的解决方案?

谢谢!

【问题讨论】:

    标签: javascript ajax firefox firefox-addon-sdk


    【解决方案1】:

    这实际上非常简单 - 在您得到回复之前不要致电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);
      }
      ...
    }
    

    【讨论】:

    • 还是不行,data.js上收到的响应还是空的。
    • @Marius:随意调试您的代码 - 空响应必须来自某个地方;)。上面的代码将response.json 传递给sendResponse,所以要么你在某处留下了另一个sendResponse 调用,要么response.json 确实是空的。
    • @WladimirPalant 您还应该将return true; 放在onMessage 的末尾。否则在调度回调后调用sendResponse - 请参阅github.com/Rob--W/browser-action-jplib/blob/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多