【问题标题】:non-casesensitive str.search(array[i]) in <script> tag is not working<script> 标签中不区分大小写的 string.search(array[i]) 不起作用
【发布时间】:2011-01-04 10:34:00
【问题描述】:

我在 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 ");   
     }
   }
 }
}

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

【问题讨论】:

  • 你不是说要删除 SRC 中包含 url 的脚本吗?不是innerHTML

标签: javascript arrays search


【解决方案1】:

当 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 级 for 循环,而且我认为它会更快,因为引擎可以一次搜索 2 个模式。

【讨论】:

  • 多哈。是的,他需要 www.proxomitron.info
  • 我想在页面呈现后处理无脚本处于活动状态时删除标签,但我想从呈现的页面中删除一些标签,例如某些页面中不需要的图标或部分 - 如果可能的话,主要问题不是用猴子问题做到这一点是我不能使用“匹配”或“搜索”函数当数组中的关键字(在案例模式)案例模式工作时。简单地 str.match(kw[0]) 结果是针对 ex。 14. 但是 str.match(kw[0]/i) // str.match("/"+kw[0]+"/i") 总是返回 -1
  • 这个包含 google 关键字的脚本标签我想删除包含关键字 google 也 Google 或 goOoGle 的标签,但我想使用 str.match 或 str.search 解决方案 str.indexOf 不能区分大小写跨度>
  • 只需将模式和主题都设为小写,然后 indexOf 将以不区分大小写的方式工作(因为它们都是小写的!)。所以你可以使用theLinks[i].innerHTML.toLowerCase().indexOf(scriptslinks[i])
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

    你是说

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

    【讨论】:

    • 不,这是匹配的,只有确切的字符串请求帮助具有其他目标(用于搜索其更强大的 reg-expr 函数)谢谢您的回答
    【解决方案4】:

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

    /scriptslink[i]/i
    

    【讨论】:

    • 这是一个正则表达式文字...scriptslink[i] 部分不会被视为一个数组。
    • Box9 是对的,这就是为什么我尝试使用这个符号并失败的开放问题的原因:p(这是 /scriptslink[i]/i 盲提示)泰语是正确的(上图)他的符号是正是我需要的
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 2021-09-25
    • 2023-03-05
    • 2018-12-14
    • 1970-01-01
    • 2023-01-18
    • 2019-05-07
    相关资源
    最近更新 更多