我将继续创建两个脚本:核心功能将部署为 Web 应用程序,一个简单的容器绑定脚本将提供一个接口来调用 Web 应用程序。
由于 Web App 未绑定到文档,因此您可能需要遵循以下方案:
function doGet(e){
if(e.parameter.docId){
doStuff(DocumentApp.openById(e.parameter.docId));
}
}
现在,当您部署应用程序时,您将获得一个链接,可让您访问该功能。
从容器绑定脚本中,您可以添加一些 UI(例如,侧面板中的 Anchor 元素)链接到具有适当参数的 Web 应用程序
ScriptApp.getService().getUrl() + "?docId=" + DocumentApp.getActiveDocument().getId()
或使用UrlFetchApp获取结果并将其显示在 UI 中。
不幸的是,这与在所有文档中自动添加功能不同,而是一种在要添加功能的每个文档中仅安装一个相对轻量级的钩子的方法,而不是完整的脚本。我不知道有任何方法可以实现这一目标。请注意,当您制作文档的副本时,该副本将包含其所有脚本,因此您可以为需要附加功能的文档创建模板。如果您希望混合和匹配多个脚本,这可能会得到确认。
我的方法的优点是,如果您修改核心功能,则所有使用它的文档都可以立即使用该更改,而无需更新其脚本。另一方面,如果容器脚本需要与 UI 进行大量交互,它可能会变得复杂,并降低将其分成两个脚本的实用性。