websocket 为什么google.script.run在javascript html页面中的onmessage()调用中不工作

gg58donl  于 2022-12-18  发布在  Go
关注(0)|答案(1)|浏览(165)

我正在尝试运行此处提供的代码:-running websocket in google sheet without using HTML code
这是html页面-

<!DOCTYPE html>
<meta charset="utf-8" />

<head>
  <script language="javascript" type="text/javascript">
    var wsUri = ("wss://stream.binance.com:9443/ws/btcusdt@kline_1m");
  <? var myparam = param(); ?>
  
  function init()  {
    websocket = new WebSocket(wsUri);
    websocket.onopen = function(evt) { onOpen(evt) };
    websocket.onclose = function(evt) { onClose(evt) };
    websocket.onmessage = function(evt) { onMessage(evt) };
    websocket.onerror = function(evt) { onError(evt) };
    nbr=0;
  }

  function onOpen(evt)  {
    //doSend(<?= myparam ?>);
  }

  function onClose(evt)  {
  }

  function onMessage(evt)  {
    google.script.run.getJSON( evt.data );//evt.data is an object
  }

  function onError(evt)  {
  }

  function doSend(message)  {
    websocket.send(message);
  }

  window.addEventListener("load", init, false);
  window.addEventListener("beforeunload", websocket.close, false);
  
  </script>
</head>

<body></body>

</html>

这是调用此客户端JavaScript的应用程序脚本代码

function modal() {
  var html = HtmlService
    .createTemplateFromFile("index")
    .evaluate()
    .setWidth(100)
    .setHeight(50);
  SpreadsheetApp.getUi().showModelessDialog(html, 'web socket');
}

这些是同一应用程序脚本中的其他功能-

const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('derCotation');

function param(){
  var valeurs = sh.getRange('B3:B'+sh.getLastRow()).getValues().join().split(",")
  var myparams = {"method": "SUBSCRIBE", "params": valeurs, "id": 1}
  return JSON.stringify(myparams) 
}

function getJSON(jsonstring){//this is receiving an object not a string
  try{
    var data = JSON.parse(jsonstring);//this is parsing an object not a strig
    var pairs = sh.getRange('A3:A').getValues().join().split(",");
    var ligne = pairs.indexOf(data.k.s);
    if (ligne != -1){
      var result=[]
      result.push([ data.k.o , data.k.c , data.k.h , data.k.l ])
      sh.getRange('C' + (ligne+3) + ':F' + (ligne+3)).setValues(result)
    }
  }
  catch(e){
  }
}

脚本正在运行,但google.script.run.getJSON( evt.data );不工作。可能是什么问题?
我测试了错误,但没有任何错误。我观察到这里的getJSON()函数google.script.run.getJSON( evt.data );没有被调用。

s3fp2yjn

s3fp2yjn1#

试着这样做:

function getJSON(data){
  Logger.log(JSON.striingify(data));
  try{
    var pairs = sh.getRange('A3:A' + sh.getLastRow()).getValues().join().split(",");
    var ligne = pairs.indexOf(data.k.s);
    if (ligne != -1){
      var result=[]
      result.push([ data.k.o , data.k.c , data.k.h , data.k.l ])
      sh.getRange('C' + (ligne+3) + ':F' + (ligne+3)).setValues(result)
    }
  }
  catch(e){
    Logger.log(e);
  }
}

相关问题