如何将Google Drive存储的Materialize.min.js引入Google Apps Script
Google Drive托管Materialize JS文件报错解决方案
M is not defined错误本质是浏览器未正确执行从Google Drive拉取的JS文件内容,核心原因是Google Drive默认返回的JS文件响应头不符合浏览器执行要求。CSS文件对响应头的校验规则比JS宽松很多,所以之前迁移CSS可以正常生效,JS需要额外处理参数和加载逻辑,可按以下步骤修复:
- 第一步:确认JS文件共享权限
打开Google Drive找到对应的materialize.min.js文件,右键点击「共享」,设置通用访问权限为「知道链接的任何人」,角色为「查看者」,保存设置。 - 第二步:使用正确的Google Drive JS调用链接
不要用export=download参数,改用export=view并追加&confirm=t参数跳过Google Drive的流量校验提示,确保返回的响应类型符合JS执行要求:<script src="https://drive.google.com/uc?export=view&id=1SkfRcC1jQwNLRVEUPgjQHSUkEFdg1BND&confirm=t"></script> - 第三步:调整JS加载顺序,保证Materialize加载完成后再执行自定义JS
把原有的<?!= include("page-js");?>部分调整为加载监听逻辑,避免自定义JS执行时M对象还未挂载:<script src="https://drive.google.com/uc?export=view&id=1SkfRcC1jQwNLRVEUPgjQHSUkEFdg1BND&confirm=t"></script> <script> window.addEventListener('load', function() { if (typeof M !== 'undefined') { <?!= include("page-js");?> } else { // 加载失败自动重试,最多重试3次 let retryCount = 0; const retryInterval = setInterval(() => { retryCount++; if (typeof M !== 'undefined' || retryCount >= 3) { clearInterval(retryInterval); <?!= include("page-js");?> } }, 500); } }) </script> - 第四步:清理浏览器缓存后重新测试,Google Apps Script Web应用部署时建议选择「每次用户访问时都更新」的版本部署模式,避免旧版本缓存影响测试结果。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

