我正在尝试使用以下代码从 Google Apps 脚本功能(使用 Amazon SES Javascript SDK)发送电子邮件 -
function sendemail(email,name,code,date,expiry,version) {
eval(UrlFetchApp.fetch("https://sdk.amazonaws.com/js/aws-sdk-2.1206.0.min.js").getContentText());
const configure = {
accessKeyId: "<mykeyid>",
secretAccessKey: "<myaccesskey>",
apiVersion: '2010-12-01',
region: 'us-east-1'
};
const ses = new AWS.SES(configure); //AWS is not defined error
//... rest of code
}
现在当我运行sendemail()
函数时,它显示“AWS 未定义”——这显然意味着我引用外部文件的方式有问题,因此无法找到 AWS。我究竟做错了什么?我知道这可能听起来像一个愚蠢的问题,但我是 JS 的初学者,因此对问题有点困惑......请指导......谢谢! :)
根据外部脚本的执行方式,加载的AWS
全局对象可能无法正确导出。在本例中,脚本测试是否self
(也window
and module
) 可用并在那里导出自身。应用程序脚本中的全局对象可以通过以下方式引用globalThis https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis。所以添加,
const self = globalThis;
将有助于出口AWS
反对到globalThis
。您最好也使用间接eval https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval并且不直接eval
。所以eval
应该位于任何函数之外,并且阻止脚本访问您的局部变量。您还可以重载全局变量 https://stackoverflow.com/a/73467157/使用代理来避免脚本访问特权数据。
即使在这一切之后,脚本可能需要某些仅在浏览器中可用的对象,例如setTimeout
。您可能需要使用应用程序脚本中已有的功能来模拟这些对象的行为。例如,setTimeout可以使用来模拟Utilities.sleep https://stackoverflow.com/questions/73166361/how-to-use-a-external-javascript-library-pdf-lib-in-apps-script。这是一个逐步手动过程,找出所有“缺失”的依赖项并模拟它们中的每一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)