2014-01-09 157 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/

祝你好运!