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

Dyl*_*Kay 0 javascript eval google-chrome-extension

我的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);
}
Run Code Online (Sandbox Code Playgroud)

这个函数是从一个遍历"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");
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,itemToSave是localStorage键,arrayToSave是我的代码中的数组:periodsArray1 [],periodsArray2 []等.那么任何人都可以帮我解决不使用eval()的问题吗?谢谢

Guf*_*ffa 5

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

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

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