我在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页面删除吗,还可以如何捕获将脚本注入已加载网页的脚本?

最佳答案

运行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个模式。

关于javascript - 不区分大小写的string.search(array [i])在<script>标签中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4592634/

10-11 04:50