为何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
相关产品推荐
相关产品推荐

