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 ドライブのようなクラウド サービスについて考えてみてください。ユーザーが安全でないコードを貼り付けたり、安全でないスプレッドシートを開いたりすると、危険にさらされる可能性があります。たとえば、スクリプトは DOM を操作したり、Cookie へのアクセスを取得したり、リクエストを実行したりできます。カスタム JavaScript パーサーを実装せずに、これを安全に防ぐ方法はありますか?
eval()
Kenneth's answer の編集: もちろん、ドキュメント自体を解析するために使用するつもりはありません。eval()
、またはドキュメントで定義されている関数を使用して式を評価することだけを考えています。次の 1 行のスクリプトを使用して列全体を指定する可能性について考えてみてください:_.range(1,10).evens()
または_.range(10,200).filter(isprime)
. Where_
は、同様のメソッドを持つ別のオブジェクトを返すメソッドを持つオブジェクトです。jQuery と d3 のチェーンのように。