在我的chrome扩展中解决eval()问题

时间:2013-05-06 11:13:25

标签: javascript google-chrome-extension eval

我的Chrome网络应用程序出现了问题。该代码可在普通的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是我代码中的数组: periodsArray1 [],periodsArray2 []等。 所以任何人都可以帮我解决不使用eval()的问题吗? 谢谢

1 个答案:

答案 0 :(得分:5)

不使用动态命名变量,而是使用对象或数组中属性的动态命名。

使用对象,您可以访问periods['period' + p].bhour而不是eval('period'+p+'.bhour')

如果您使用数组,则可以访问period[p-1].bhour而不是eval('period'+p+'.bhour')