You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何google.script.run在WebSocket的onmessage()调用中无法正常工作?

问题排查方向
  • 参数格式不兼容:google.script.run要求传递的参数是可序列化的JSON类型(如字符串、数字、普通对象),如果evt.data是WebSocket二进制数据或非标准JSON格式,会导致调用静默失败。先在onmessage回调里打印typeof evt.data和evt.data内容,确认参数是合法的可序列化值。

  • 函数访问权限问题:后端的getJSON必须是全局顶级函数,不能嵌套在其他函数内部,否则google.script.run无法访问到它。检查函数定义:

    // 正确写法
    function getJSON(data) {
      // 处理逻辑
    }
    
    // 错误写法(嵌套函数,外部无法访问)
    function doGet() {
      function getJSON(data) { /* ... */ }
    }
    
  • 未捕获调用错误:默认情况下google.script.run的失败不会抛出控制台错误,必须手动绑定错误处理函数才能看到问题。修改onmessage回调,强制捕获错误:

    ws.onmessage = function(evt) {
      google.script.run
        .withSuccessHandler(function(result) {
          console.log("调用成功:", result);
        })
        .withFailureHandler(function(error) {
          console.error("调用失败:", error);
        })
        .getJSON(evt.data);
    }
    
  • 内容安全策略(CSP)限制:如果HTML是通过HtmlService.createHtmlOutput加载的,默认CSP可能限制脚本行为。确保使用HtmlService.createHtmlOutputFromFile加载页面,且未自定义过于严格的CSP头,避免阻断google.script.run的执行。

  • WebSocket数据解析问题:如果WebSocket传输的是JSON字符串,后端函数需要手动解析;如果是对象,要确保没有循环引用等不可序列化的结构。例如:

    // 后端处理JSON字符串的示例
    function getJSON(dataStr) {
      const data = JSON.parse(dataStr);
      // 后续逻辑
    }
    

内容的提问来源于stack exchange,提问作者San Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:40:42