我正在考虑使用 JSON 和 JavaScript 创建电子表格。这实际上是一个关于 JavaScript 的理论问题。
在某些情况下,当您可以使用单个函数生成一整列时,它会更有用。就像在这个例子中一样:
{
"type": "jsheet",
"version": "1",
"author": "John Doe",
"title": "Example Spreadsheet",
"groups":
[
{
"name": "Document Information",
"columns":
[
{
"name": "Title",
"rows": [
"_.title"
]
},
{
"name": "Author",
"rows": [
"_.author"
]
}
]
}
{
"name": "Numbers 1-10",
"columns":
[
{
"name": "Even numbers",
"rows": "_.range(1,10).evens()"
},
{
"name": "Odd numbers",
"rows": "_.range(1,10).odds()"
}
]
}
]
}
当您仅使用来自受信任来源且仅在您的计算机上的代码时,这似乎完全没问题。但是想想像 Google Drive 这样的云服务。如果用户粘贴不安全的代码或打开不安全的电子表格,他们可能会遇到危险。例如,脚本可以操作 DOM,甚至可以访问 cookie、执行请求等等。有没有办法在不实现自定义 JavaScript 解析器的情况下安全地防止这种情况发生?
编辑肯尼斯的回答:当然我不打算用来eval()
解析文档本身。我只考虑使用eval()
, 或文档中定义的函数来评估表达式。考虑使用这行脚本指定一整列的可能性:_.range(1,10).evens()
或_.range(10,200).filter(isprime)
. Where_
是一个对象,它具有返回另一个对象的方法,这些对象具有相似的方法。就像 jQuery 和 d3 中的链一样。