背景:我正在尝试创建具有以下描述的谷歌应用程序脚本:类型:独立的webapp运行方式:我访问:任何
文件描述
- Code.gs-主gs代码
- 主页.html-主页
- Content.html-其他内容
- Js.html-JavaScript代码内容
一切如预期
问题:我担心用户可以很容易地从HTML输出中看到JavaScript代码内容(即代码可以从浏览器web开发工具访问)。
主要问题:
- 有没有办法让用户无法访问JavaScript代码内容
可能的相关解决方案/附加问题
- 我试图实现eval函数,但无法使其工作链接1链接2
我暂时将其从以下片段中排除,因为我无法使其工作,并且可能偏离主题(cmiiw)
(尽管如此,如果它可以解决我的问题,那么使用下面的片段对eval实现的任何进一步解释/示例都将不胜感激。)
- 将JavaScript分离到库中由于可能的性能问题或不必要的复杂性,我还没有真正尝试过,因为我不打算在我创建的单个Web应用程序之外的其他地方使用JavaScript代码
样品
- 带有一些按钮的主html页面("主页")
- 在按钮上点击它添加来自另一个html文件的内容("内容")
- 单击另一个按钮,它将删除添加的内容
事实上,当用户(我)通过web开发工具检查web应用程序的内容时,JavaScript代码会显示在HTML输出中
代码.gs
function doGet(e) {
Logger.log(Utilities.jsonStringify(e) );
// html head
var output = HtmlService.createTemplateFromFile('Home').evaluate();
var output = output.asTemplate();
return output.evaluate()
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setTitle('Home');
}
function include(filename) {
return HtmlService.createTemplateFromFile(filename).evaluate().getContent();
}
function getHtmlOutput(filename) {
return HtmlService.createTemplateFromFile(filename).evaluate();
}
主页.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<style>
div {
color: red;
}
</style>
</head>
<body>
<div id="content-container">
Hello World
<button type="button" onclick="add()">Add</button>
<button type="button" onclick="remove()">Remove</button>
<?!= include('js');?>
</div>
</body>
</html>
Content.html
<div id="content">
This is the content
</div>
Js.html
<script>
function runGS(functionName,params=[]) {
return new Promise((resolve,reject) => {
google.script.run
.withSuccessHandler(data => {
resolve(data)
})
.withFailureHandler(error => {
reject(error)
})
[functionName](...params);
})
}
async function add() {
var content = await runGS("include",["Content"]);
var target = document.getElementById("content-container");
target.insertAdjacentHTML("afterend",content);
return "done";
}
function remove() {
var target = document.getElementById("content");
target.remove();
}
</script>
虽然没有任何方法隐藏客户端代码本身,但最好使用像这样的模糊处理程序,这可能也是一个很好的解决方案。
请注意,这不能在联机IDE中完成。在将代码推送到谷歌应用程序脚本项目之前,您需要在计算机上安装Node.js并对代码进行加密和模糊处理。要开始使用扣,如果你还没有,你可以看看我关于这个主题的博客文章。