2014-01-09 114 views
0

此代碼的目標是檢查連續的&,b,u和=。但是,當我通過Javascript注入輸入我的代碼時,它會崩潰網頁。Javascript「for」循環崩潰頁面

代碼:

var str = document.URL; //gets URL of webpage 
var copied = 0; 

//this loop reads the URL character by character and checks if it is an &, b, u, or =. If so, it sets the corresponding variables to 1. 
for (var i = 0; i < 1; i++) { 
    var res = str.charAt(i); 
    if (res == "&") { 
     var ampYes = 1; 
    } else { 
     var ampYes = 0; 
    } 
    if (res == "b") { 
     var bYes = 1; 
    } else { 
     var bYes = 0; 
    } 
    if (res == "u") { 
     var uYes = 1; 
    } else { 
     var uYes = 0; 
    } 
    if (res == "=") { 
     var eqYes = 1; 
    } else { 
     var eqYes = 0; 
    } 
    alert(res) 
} 

我相信,它的崩潰的原因是由於一個錯誤在我的「if」之一。我在沒有&符號的網站上測試了它,並沒有崩潰。但是,在連續&,b,u和=的網站上,它會使頁面崩潰。

+2

很確定它不是你的代碼崩潰,它只會循環一遍for循環。 –

+0

你能解釋一下「崩潰」和「崩潰頁面」是什麼意思嗎?你在控制檯中遇到錯誤嗎?如果是這樣,你會得到什麼錯誤?通常,「崩潰」意味着整個瀏覽器進程死亡。 – Pointy

+0

你能解釋一下你的代碼應該做什麼嗎?您只循環一次迭代...您設置了一些永遠不會使用的局部變量。我不明白這是應該完成的。 – crush

回答

5

不要發明自己的車輪。使用url.indexOf("&bu=") > -1來查看它是否在那裏。

+0

我不認爲url.indexOf(「&bu =」)> -1將返回true與url u = foo,對於這樣的情況下,最好使用匹配正則表達式。 indexOf是一個很好的解決方案,但是它一次尋找單個字符就像if(url.indexOf(「&」)> -1)等等...... –

+0

不是,但問題指出作者試圖找到連續&,b,u和=,我們用indexOf(「&bu =」)做。他們如何實現它變得毫無意義,因爲有一個乾淨的JS本地方式來做到這一點。 –

1

這裏是正則表達式簡單的解決方案:

var url = document.URL, 
    ampYes, bYes, uYes, eqYes; 

ampYes = /\&/gi.test(url) ? 1 : 0; 
bYes = /b/gi.test(url) ? 1 : 0; 
uYes = /u/gi.test(url) ? 1 : 0; 
eqYes = /\=/gi.test(url) ? 1 : 0; 

console.log(url, ampYes, bYes, uYes, eqYes); 

您可以嘗試改變這裏的URL和測試的價值:http://jsfiddle.net/kq82D/

祝你好運!