我在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/