网络应用

如果您为脚本构建了用户界面,请将该脚本发布为 Web 应用。例如,如果脚本允许用户与支持团队成员预约,最好以 Web 应用的形式呈现,以便用户直接通过浏览器访问该脚本。

只要符合以下要求,独立脚本绑定到 Google Workspace 应用的脚本都可以转换为 Web 应用。

Web 应用的要求

如果脚本满足以下要求,则可以将其发布为 Web 应用:

请求参数

当用户访问应用或程序向应用发送 HTTP GET 请求时,Google Apps 脚本会运行函数 doGet。当程序向应用发送 HTTP POST 请求时,Apps 脚本会运行 doPost。在这两种情况下,e 实参都表示一个事件参数,该参数可以包含有关任何请求参数的信息。事件对象的结构如下表所示:

字段
e.queryString

网址的查询字符串部分的值;如果未指定查询字符串,则为 null

name=alice&n=1&n=2
e.parameter

与请求 参数对应的键值对对象。对于具有 多个值的参数,系统只会返回第一个值。

{"name": "alice", "n": "1"}
e.parameters

e.parameter 类似的对象,但每个键都有一个值数组

{"name": ["alice"], "n": ["1", "2"]}
e.pathInfo

/exec/dev 之后的网址路径。 例如,如果网址路径以 /exec/hello 结尾,则 路径信息为 hello

e.contextPath 未使用,始终为空字符串。
e.contentLength

POST 请求的请求正文的长度;对于 GET 请求,则为 -1

332
e.postData.length

e.contentLength 相同

332
e.postData.type

POST 正文的 MIME 类型

text/csv
e.postData.contents

POST 正文的内容文本

Alice,21
e.postData.name

始终为值“postData”

postData

usernameage 等参数传递给如下所示的网址:

https://script.google.com/.../exec?username=jsmith&age=21

按如下方式显示参数:

function doGet(e) {
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params).setMimeType(ContentService.MimeType.JSON);
}

在前面的示例中,doGet 返回以下输出:

{
  "queryString": "username=jsmith&age=21",
  "parameter": {
    "username": "jsmith",
    "age": "21"
  },
  "contextPath": "",
  "parameters": {
    "username": [
      "jsmith"
    ],
    "age": [
      "21"
    ]
  },
  "contentLength": -1
}

以下参数名称由系统预留,不应在网址参数或 POST 正文中使用:

  • c
  • sid

使用这些参数可能会导致 HTTP 405 响应,并显示错误消息“Sorry, the file you have requested does not exist.”(抱歉,您请求的文件不存在)。 如果可以,请更新脚本以使用不同的参数名称。

将脚本部署为 Web 应用

如需将脚本部署为 Web 应用,请按以下步骤操作:

  1. 依次点击脚本项目右上角的部署 > 新建部署
  2. 点击“选择类型”旁边的“启用部署类型 > Web 应用” 。
  3. 在“部署 配置”下的字段中输入有关 Web 应用的信息。
  4. 点击部署

与您希望使用您的 Web 应用的用户共享该 Web 应用的网址,前提是您已授予他们访问权限。

如果 Web 应用的所有权 更改为 其他网域中的共享云端硬盘 或账号,则在一个网域中部署的 Web 应用将停止运行。如需更正此问题,请让新所有者或协作者在新网域中重新部署 Web 应用。或者,如果将 Web 应用移回其原始网域,则该 Web 应用将再次开始在该网域中运行,而无需重新部署。

测试 Web 应用部署

如需将脚本作为 Web 应用进行测试,请按以下步骤操作:

  1. 依次点击脚本项目右上角的部署 > 测试 部署
  2. 点击“选择类型”旁边的“启用部署类型 > Web 应用” 。
  3. 在 Web 应用网址下方,点击复制
  4. 将该网址粘贴到浏览器中,然后测试 Web 应用。

    此网址以 /dev 结尾,只有对脚本拥有编辑权限的用户才能访问。此应用实例始终运行最近保存的代码,仅用于开发期间的测试。

如需测试 精细 OAuth 功能,请确保您的项目尚未获得任何授权。如需使任何现有授权失效,请使用 ScriptApp.invalidateAuth对于已部署并以活跃用户身份运行的任何 Web 应用,请将清单中的 JSON 字段修改为 。executeAsUSER_DEPLOYING

在部署 Web 应用以开发者身份运行时,请务必谨慎处理通过 ScriptApp.getOAuthToken获取的 OAuth 令牌。 这些令牌可以授予其他应用访问您的数据的权限,切勿将其传输给客户端。

权限

Web 应用的权限因您选择执行应用的方式而异:

  • 以我的身份执行应用 \- 在这种情况下,无论谁访问 Web 应用,脚本始终以您(脚本的所有者)的身份执行。
  • 以访问 Web 应用的用户的身份执行应用—在这种情况下,脚本以使用 Web 应用的活跃用户的身份运行。此权限方法会导致 Web 应用在用户授权访问时显示脚本所有者的电子邮件地址。

为防止滥用,Apps 脚本对新用户授权以用户身份执行的 Web 应用的速率施加了限制。这些限制 取决于发布账号是否属于 Google Workspace 网域等因素。

使用 共享云端硬盘协作处理 Web 应用。 部署共享云端硬盘中的 Web 应用时,选择“以您的身份执行”会导致 Web 应用以部署该应用的用户(因为没有脚本所有者)的权限执行。

在 Google 协作平台中嵌入 Web 应用 {:#embed-web-app}

嵌入的 Web 应用仍受访问权限的限制,以防止恶意使用。如果嵌入的 Web 应用似乎无法正常运行,请检查 Web 应用所有者和网域管理员设置的权限是否允许使用该应用。

如需在协作平台中嵌入 Web 应用,必须先 部署该应用。您还需要从部署 对话框中获取已部署的网址

如需将 Web 应用嵌入到 协作平台 页面中,请按以下步骤操作:

  1. 打开要添加 Web 应用的协作平台页面。
  2. 依次选择插入 > 嵌入网址
  3. 粘贴 Web 应用网址,然后点击添加

Web 应用会显示在页面预览的框架中。当您发布该页面时,网站访问者可能需要先授权 Web 应用,然后该应用才能正常执行。未经授权的 Web 应用会向用户显示授权提示。

Web 应用和浏览器历史记录

如需模拟多页应用或使用网址参数控制动态界面的应用,请定义一个状态对象来表示应用的界面或页面,并在用户浏览应用时将该状态推送到浏览器历史记录中。监听历史记录事件,以便 Web 应用在用户使用浏览器按钮来回浏览时显示正确的界面。通过在加载时间查询网址参数,让应用根据这些参数动态构建其界面,从而允许用户以特定状态启动应用。

Apps 脚本提供了两个异步客户端 JavaScript API,以帮助创建与浏览器历史记录相关联的 Web 应用:

  • google.script.history 提供了一些方法,用于允许对浏览器历史记录更改做出动态响应。这包括:将状态(您定义的简单对象)推送到浏览器历史记录中、替换历史记录堆栈中的顶部状态,以及设置监听器回调函数以响应历史记录更改。

  • google.script.url 提供了一种方法,用于检索当前页面的网址参数和网址片段(如果存在)。

这些历史记录 API 仅适用于 Web 应用。它们不支持边栏、对话框或插件。此外,不 建议在嵌入到协作平台中的 Web 应用中使用此功能