/**
* Respond to HTTP GET request. Returns a htmlOutput object.
*/
function doGet(e){
return HtmlService.createTemplateFromFile('index')
.evaluate()
.setTitle('My web app');
}
/**
* Returns the file content of a .gs or .html Google Apps Script file.
*
* @param {filename} Google Apps Script file name. It should not include the .gs or .html file extension
*/
function include(filename){
const [name, sufix] = filename.split('.');
switch(sufix){
default:
return HtmlService.createHtmlOutputFromFile(name).getContent();
case 'js':
const content = ScriptApp.getResource(name).getDataAsString();
return `<script>${content}</script>`;
}
}
index.html
<!DOCTYPE html>
<html>
<head>
<?!= include('stylesheet.css') ?>
</head>
<body>
<p>Add here some content</p>
<?!= include('javascript.js') ?>
</body>
</html>
javascript.js.gs
/**
* Arithmetic addition of two operands. Validates that both operands are JavaScript numbers.
*
* @param {number} a Left addition operand
* @param {number} a Right addition operand
*/
function addition(a,b){
if(typeof a !== 'number') || typeof b !== 'number') throw new Error('Operands should be numbers');
return a + b;
}
tests.gs
/**
* Passing two numbers. Expected result: 2.
*/
function test_addition_01(){
const a = 1;
const b = 1;
const result = addition(a,b);
console.log(result === 2 ? 'PASS' : 'FAIL');
}
/**
* Passing one number and one string. Expected result: Custom error message.
*/
function test_addition_02(){
const a = 1;
const b = '1';
try{
const result = addition(a,b);
} catch(error) {
console.log(error.message === 'Operands should be numbers' ? 'PASS' : 'FAIL');
}
}
注意:ScriptApp.getResource无法从库中提取文件,即使在库中包含此方法 对于调试使用其他技术的JavaScript,例如document.getElementById(id),一个选项是开发工具控制台或使用try... catch并从服务器端调用一些函数,google.script.run,以便在执行日志中记录错误。 要调试调用JavaSCript库的JavaScript,可以将库代码复制到一个或多个.gs文件中,或者使用UrlFetchApp和eval将其加载到服务器端(请参见How to load javascript from external source and execute it in Google Apps Script)
2条答案
按热度按时间mcdcgff01#
您可以使用浏览器的开发者工具。在Chrome中,按下f12按钮,或选择更多工具、开发者工具,浏览器中将打开如下窗口:
其中一个选项卡标记为Console。您可以使用以下选项将信息打印到控制台:
陈述式。
当应用程序脚本宏运行并将HTML提供给浏览器时,如果有错误,它们将显示在控制台日志中。
我用你张贴的HTML,并在这个控制台得到消息:
因此,对于HTML的
<script>
标签中的JavaScript,您不必在Apps Script代码编辑器中查找错误。您需要使用浏览器的开发工具。.gs代码文件中的JavaScript是服务器端代码。它在Google的服务器上运行。HTML标签中的JavaScript在用户计算机上的用户浏览器中运行。您还可以在浏览器中逐步执行客户端JavaScript代码。
一个问题是,当HTML被提供时,代码被改变。
因此,应用程序脚本代码编辑器中的JavaScript看起来将与提供给浏览器的JavaScript不同。如果您查看提供给浏览器的JavaScript,它看起来将与原始文件中Script标签中的代码完全不同。
您也可以使用包含错误检查功能的代码编辑器。NetBeans有一个免费的代码编辑器。
yzxexxkh2#
调试Google Apps Script Web应用程序在很大程度上取决于所使用的Google Apps Script功能,即是否使用模板化HTML创建,客户端是否与服务器端通信等。
由于OP案例中Google Apps脚本执行日志未显示任何错误消息,因此很可能是创建了
HtmlOutput
,并且应该可以在客户端检查代码。Google向客户端发送一个IIFE,将传递给HtmlService的HTML/CSS/JavaScript的satinized版本插入到iframe中,也就是说白色将不相同,注解将不包含在其他更改中。无论如何,您可以使用开发工具查看生成的JavaScript,并从开发工具控制台调用JavaScript函数,等等。
要从Google Apps Script Web应用执行客户端JavaScript,请首先在控制台下拉选择器上选择
userHtmlFrame(userCodeAppPanel)
:您甚至可以使用开发工具的元素面板或开发工具控制台中的JavaScript来更改客户端JavaScript,以及执行其他操作。请记住,在那里所做的更改不会保存到Google Apps脚本项目中。
值得一提的是,使用Google Apps脚本编辑器可以调试纯JavaScript。更简单的方法是将JavaScript代码放在一个.gs文件中,并使用HtmlTemplate创建Web应用程序的
HtmlOutput
对象,同时使用:此外,该方法将有助于使用桌面工具测试JavaScript代码,将有助于更容易地修复由缺少/错放<,>,",',(,),:,;
导致的“格式错误”错误,并利用.html文件中不可用的JavaScript的intellisense特征。Web应用程序的示例,其客户端JavaScript位于.gs文件而不是.html文件中。客户端JavaScript位于
javascript.js.gs
文件中。在这个过于简化的示例中,要测试的函数需要参数。这使得该函数不能直接从编辑器工具栏运行,因此在www.example.com文件中有两个“测试”函数test.gs,用于设置所需参数并调用要调试的函数。Code.gs
index.html
javascript.js.gs
tests.gs
注意:
ScriptApp.getResource
无法从库中提取文件,即使在库中包含此方法对于调试使用其他技术的JavaScript,例如
document.getElementById(id)
,一个选项是开发工具控制台或使用try... catch并从服务器端调用一些函数,google.script.run,以便在执行日志中记录错误。要调试调用JavaSCript库的JavaScript,可以将库代码复制到一个或多个.gs文件中,或者使用
UrlFetchApp
和eval
将其加载到服务器端(请参见How to load javascript from external source and execute it in Google Apps Script)