代码之家  ›  专栏  ›  技术社区  ›  john k

如何访问firefox插件中表单发布的原始数据响应?

  •  0
  • john k  · 技术社区  · 8 年前

    我正在尝试构建一个firefox加载项,用户在其中填写表单并将其提交给服务器。我想知道如何从服务器访问响应。在此示例中,响应为 [“success”,“createAccount”]

    我在这个小弹出窗口中看到了在我单击提交之后出现在原始数据选项卡中的数据。(见图)。

    我只是不知道如何从我的代码中访问它。这看起来应该很简单,但我想不出来。

    我尝试重写onsubmit和onclick方法/侦听器,以通过Ajax/xmlhttpRequest路由它们,但我得到一个内容安全性错误( 内容安全策略:页面设置阻止了自处加载资源(script-src)。来源:按钮元素的onclick属性。)

    我看过其他的SO帖子,它们都不是专门针对插件中表单的响应的。

    如有任何帮助,我们将不胜感激。 [“成功”,“创建帐户”]

    我在这个小弹出窗口中看到了在我单击提交之后出现在原始数据选项卡中的数据。(见图)。 enter image description here

    我只是不知道如何从我的代码中访问它。这看起来应该很简单,但我想不出来。

    我尝试重写onsubmit和onclick方法/侦听器,以通过Ajax/xmlhttpRequest路由它们,但我得到了一个内容安全错误。( 内容安全策略:页面设置阻止了自加载资源(script-src)。源:按钮元素的onclick属性。)

    我看过其他的SO帖子,它们都不是专门针对插件中表单的响应。

    感谢您的帮助。

    1 回复  |  直到 8 年前
        1
  •  0
  •   john k    8 年前

    答案是用 webRequests.filterResponseData .

    代码是这样的:

        var rawdata;
        var listener = function(result){
          let filter = chrome.webRequest.filterResponseData(result.requestId);  //https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/filterResponseData
          filter.ondata = event => {
          self.data = {
              data: Array.apply(null, new Uint8Array(event.data)),
    
              contentType: result.type
          };
          rawdata = arrayBufferToData.toJSON(event.data);  
    
          }
           filter.onstop = event => {
           filter.disconnect();
          }
    
        }
      browser.webRequest.onHeadersReceived.addListener(listener, {urls: ["<all_urls>"]},["blocking"]);
    

    然后,rawdata将具有正确的值。 感谢IceCub的指点。

    arraybuffertodata来自 here

    不幸的是,这只适用于火狐,而不是Chrome。

    推荐文章