1

現在取り組んでいる Chrome Web アプリに問題があります。コードは通常の chrome ブラウザで検索できますが、Chrome ウェブストアは私のコードを気に入りません:

次のコンテンツ セキュリティ ポリシー ディレクティブに違反しているため、スクリプトの評価を拒否しました: "script-src 'self' chrome-extension-resource:"。

これは、eval() を含むコード内のセクションの 1 つです。

function checkTimeToSinglePeriod(p) {
console.log("Check time for Period " + p + "...");
var TempBHour = "period" + p + ".bhour";
TempBHour = eval(TempBHour);
var TempBMin = "period" + p + ".bmin";
TempBMin = eval(TempBMin);
var TempEHour = "period" + p + ".ehour";
TempEHour = eval(TempEHour);
var TempEMin = "period" + p + ".emin";
TempEMin = eval(TempEMin);
}

この関数は、「p」を通過する for ループから呼び出されるため、オブジェクト period1.bhour、period2.bhour などを循環します。Temp 変数 (TempEmin、TempEHour など) は、period1.ehour の値を生成します。 "period1.ehour" のような文字列ではなく、14 のようなものかもしれません。また、コード内に eval() を使用して、作成された文字列を配列名に切り替えるセクションがあります。

for (d = 1; d < 8; d++) { //Loop through days
    for (l = 1; l < 8; l++) { //loop through lessons
        itemToSave = "D" + d + "L" + l;
        arrayToSave = "periodsArray" + d + "[" + (l - 1) + "]";
        localStorage.setItem(itemToSave, eval(arrayToSave));
        console.log(itemToSave + " | Saved");
    }
}

ここで、itemToSave は localStorage キーで、arrayToSave は私のコードの配列です: periodArray1[]、periodsArray2[] など。ありがとうございました

4

1 に答える 1

6

変数の動的命名を使用する代わりに、オブジェクトまたは配列内のプロパティの動的命名を使用します。

オブジェクトを使用すると、 のperiods['period' + p].bhour代わりにアクセスできますeval('period'+p+'.bhour')

配列を使用する場合は、period[p-1].bhour代わりにアクセスしますeval('period'+p+'.bhour')

于 2013-05-06T11:18:15.737 に答える