<script>标记中的非大小写敏感的string.search(array [i])无法正常工作</script>

时间:2011-01-04 10:34:00

标签: javascript arrays search

我有问题在innerHTML中使用数组关键字和非区分大小写的搜索 我正在尝试写Greasemonkey JS,它将删除包含关键字的标签

 function removebadcriptts() {

 var  scriptslinks = ['jumper.php','redirect.php'];
 var theLinks = document.getElementsByTagName("script");

 for (var i=0; i<scriptslinks.length; i++)
 {
   for (var j=0;j<theLinks.length;j++)
   {
     if (theLinks[i].innerHTML.search("/"+scriptslinks[i]+"/i/")  !== -1)
      /keyword/i = regular expression for non-case is not working
     {     
      console.error("InnerHTML Keyword found ");      
      theLinks[j].parentNode.removeChild(theLinks[j]);
     } 
     else
     {
       console.error("InnerHTML Keyword  not found ");   
     }
   }
 }
}

任何人都可以帮助如何删除和匹配此类脚本并从WEB页中删除如何捕获将脚本注入已加载网页的脚本

4 个答案:

答案 0 :(得分:2)

search需要RegExp object。所以试试这个:

theLinks[i].innerHTML.search(new RegExp(scriptslinks[i], "i"))

虽然你也可以传递一个字符串,但它会被用来创建像new RegExp(string)这样的 RegExp 对象,但是你不能用它设置 i 修饰符

此外,您应该转义正则表达式的特殊字符,例如.。您可以使用此方法执行此操作:

RegExp.quote = function(str) {
    return str.replace(/(?=[\\^$*+?.()|{}[\]])/g, "\\");
}

答案 1 :(得分:2)

你的意思是

 function removebadcriptts() {

 var  scriptslinks = ['jumper.php','redirect.php'];
 var theLinks = document.getElementsByTagName("script");

 for (var i=0; i<scriptslinks.length; i++)
 {
   for (var j=0;j<theLinks.length;j++)
   {
     if (theLinks[i].src.toLowerCase().indexOf(scriptslinks[i]) !== -1)
     {     
      console.error("SRC Keyword found ");      
      theLinks[j].parentNode.removeChild(theLinks[j]);
     } 
     else
     {
       console.error("SRC Keyword  not found ");   
     }
   }
 }
}

答案 2 :(得分:2)

当Greasemonkey脚本运行时,页面上已有的脚本已经运行。删除它们不会撤消这些脚本对页面所做的操作。

此外,Greasemonkey脚本之后插入的脚本也不会被捕获,因此这个Greasemonkey可能无法正常工作。

另一种方法是使用NoScript附加组件,因为它已经设计用于防止脚本运行。


编辑:由于OP说主要问题是使搜索工作,而不是将模式存储在数组中的字符串中,您可以直接存储模式。

 var scriptslinks = [/jumper\.php/i, /redirect\.php/i];

匹配时

     if (theLinks[j].innerHTML.search(scriptslinks[i])  !== -1)

请注意,正则表达式直接传递给搜索功能。 theLinks[i]也应为theLinks[j]

另一种解决方案:使用单一模式。

     if (theLinks[j].innerHTML.search(/jumper\.php|redirect\.php/i)  !== -1)

这样你就不必为循环创建2级,我认为它会更快,因为引擎可以一次搜索2个模式。

答案 3 :(得分:0)

尝试使用.Match,我相信正则表达式必须如下:

/scriptslink[i]/i