あなたはJavaScriptでエンコードされた機能を持っている場合は、すでにあなたのように、localStorage
から今までそれを復元する必要はないだろうそれを利用できるようにする。
JSONで関数をエンコードすることはできません。関数のソースコードを保存し、取得時にeval
を適用することができます。しかし、すべてが知っているように、これはフレーズで捕らえられた特定のリスクを持っています。 "eval
は悪です"です。
機能が何をすべきかを詳しく説明するオブジェクト構造を作成する場合は、そのリスクを少しでも制限できます。あなたのケースでは、関数内のすべてのステートメントは、jQueryセレクターに適用されるメソッドです。この次のオブジェクトを表すことができます:
var compressed = [
{ selector: '.whole_wrap_of_editcriteria', method: 'css', args: ['display', 'none'] },
{ selector: '#wrappler', method: 'css', args: ['display', 'none'] },
{ selector: '#li_addcriteria', method: 'css', args: ['display','none'] },
{ selector: '#li_menu1', method: 'addClass', args: ['active'] },
{ selector: '#home', method: 'removeClass', args: ['active'] },
{ selector: '#menu1', method: 'addClass', args: ['active'] },
{ selector: '#title_panel', method: 'html', args: ['Edit criteria scoring'] }
];
その後、あなたの実際の機能を、同じ効果が得られ、その入力として、そのオブジェクトを取り、それを処理することができます:
var applyInstructions = function(instructions) {
instructions.forEach(cmd => $(cmd.selector)[cmd.method](...cmd.args));
}
を今、ときにlocalStorage
にこの知識を保存したい、あなたは上記のみ構築されたオブジェクトを格納する必要があり、そのような:
// save to localStorage:
localStorage.setItem('compressed', JSON.stringify(compressed));
そして、それを取得した後、あなたはGENERを実行しますその上にIC機能:
// get from localStorage:
applyInstructions(JSON.parse(localStorage.getItem('compressed')));
これはeval
を使用してに似ていますが、それはあなたが(applyInstructions
で)実行することができるものに制限を置くことができるという利点があります。例えば、属性が値css
,addClass
,removeClass
およびhtml
のいずれかであることを確認することができますが、最後の1つは危険な状態になる可能性があります。可能であれば、textContent
がより良い選択肢になります。
var applyInstructions = function(instructions) {
if (instructions.some(
cmd => ['css','addClass','removeClass','textContent'].indexOf(cmd.method)==-1)) {
throw "Invalid instructions object";
}
instructions.forEach(cmd => $(cmd.selector)[cmd.method](...cmd.args));
}
[HTML5のlocalStorageでオブジェクトを保存する]の可能複製(http://stackoverflow.com/questions/2010892/storing-objects-in-html5:ここ
は
applyInstructions
それより安全なように見えることができるかであります-localstorage) – eisbehrその特定の例では、実際にlocalStorageに保存するものは、関数の** result **です。 – Dekel
コードを保存する代わりに、データを保存して、必要なときに再度解析する必要があります。 – Siguza