2013-05-06 167 views
0

我遇到了我現在正在使用的chrome web應用程序的問題。代碼工作找到一個正常的chrome瀏覽器,但Chrome Web Store的不喜歡我的代碼:在我的Chrome擴展中解決eval()

拒絕,因爲它違反了以下內容安全政策指令,以評估劇本:「劇本-src的‘自我’鍍鉻擴展資源」。

這裏是在我的代碼的部分,它包含一個eval()中的一個:通過我的對象通過「P」,所以它循環通過

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); 
} 

該函數是從稱爲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()? 謝謝

回答

5

而不是使用變量的動態命名,使用對象或數組中的屬性的動態命名。

使用對象時,您將訪問periods['period' + p].bhour而不是eval('period'+p+'.bhour')

如果您使用陣列,您將訪問period[p-1].bhour而不是eval('period'+p+'.bhour')