1

我目前正在使用的 chrome Web 应用程序有问题。该代码可以在普通的 chrome 浏览器上找到,但 Chrome 网上应用店不喜欢我的代码:

拒绝评估脚本,因为它违反了以下内容安全策略指令:“script-src 'self' chrome-extension-resource:”。

这是我的代码中包含 eval() 的部分之一:

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 的值,它可能是 14,而不是像“period1.ehour”这样的字符串我的代码中还有一个部分使用 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[]、periodArray2[] 等。所以任何人都可以帮我解决不使用 eval() 的问题吗?谢谢你

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 回答