我有问题在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页中删除如何捕获将脚本注入已加载网页的脚本
答案 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