javascript - Websockets - 在 onmessage() 之外传递数据

标签 javascript websocket firefox-addon-webextensions

我的 WebExtension 连接到 WebSockets 服务器以检索数据。

function foo(responseDetails){
    var ws = new WebSocket("ws://localhost:9876/");

    ws.onopen = function(event){
        // send some data to the server
        ws.send("some data");
    }

    ws.onmessage = function(event){
        // receive some data from the server
        data = event.data;
    }

    // how to access the data from here?
    if(data == 0)
        return {cancel:true}
    else
        return {cancel:false}
}

browser.webRequest.onBeforeRequest.addListener(
        foo, 
        {urls:["*//*/*"]},
        ["blocking"]
)

每当请求完成时,函数foo()调用它打开一个 WebSocket 到 ws://localhost:9876 ,发送一个字符串,然后接收 data 。该数据决定请求是否会被阻止。

读完the answers here后,我还是一头雾水。我不确定如何在函数 foo() 内实现回调.

Similar question但答案不是我正在寻找的。

最佳答案

您可以针对这个确切的用例使用 Promise,如下所示应该有效:

function foo(responseDetails) {
  return new Promise(function(resolve) {
    var ws = new WebSocket("ws://localhost:9876/");

    ws.onopen = function(event) {
      // send some data to the server
      ws.send("some data");
    }

    ws.onmessage = function(event) {
      // receive some data from the server
      var data = event.data;
      if (data == 0) {
        resolve({
          cancel: true
        });
      } else {
        resolve({
          cancel: false
        })
      }
    }
  });
}

browser.webRequest.onBeforeRequest.addListener(
  foo, {
    urls: ["*//*/*"]
  }, ["blocking"]
)

更多信息可以找到here

关于javascript - Websockets - 在 onmessage() 之外传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939957/

相关文章:

google-chrome-extension - 同域策略如何应用于 Firefox 和 Chrome 扩展中的后台脚本(非内容脚本)?

javascript - Web 扩展 API 上的 JQuery

firefox - 防止 Firefox 在运行 web-ext 时打开隐私声明?

javascript - 在 Node 中强制进行垃圾收集以测试 WeakRef 和 FinalizationRegistry

javascript - 如何隐藏标记簇内标记上的信息窗口

javascript - 辅助函数reactjs

ruby-on-rails - 如何在 Ruby 中创建 Web 套接字客户端?

javascript - WebSocket 连接超时

firefox - 如何在 Firefox 的 Web 扩展中获取当前选项卡的历史记录?

javascript - 根据帮助文档中的新语法重写 html2canvas