2011-01-04 6 views
1

innerKeyのキーワードと大文字小文字を区別しない検索を使用しています キーワードを含むタグを削除するGreasemonkey JSを作成しようとしています<script>のタグではなく、str.search(array [i])のタグが機能していません

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

は誰のヘルプHOWTOは削除して、スクリプトのこの種と一致し、

+1

SRCにURLが含まれているスクリプトを削除しないでください。 Not innerHTML – mplungjan

答えて

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つのパターンを検索することができますよう、それは、より速くなると思うその方法。

+0

Dohです。他のターゲット(より強力な検索のためのreg-expr関数)があります。ええ、www.proxomitron.infoが必要です。 – mplungjan

+0

レンダリングされたページがレンダリングされているときに、後処理なしのスクリプトがアクティブですが、レンダリングされたページから不要なアイコンやページの一部を削除する必要があります。猿の問題でそれはできますか?配列(case-in-caseモード)caseモードのキーワードが動作している場合、 "match"または "search"関数を使用できません。単純にstr.match(kw [0])の結果は元のものです。 str.match(kw [0]/i)// str.match( "/" + kw [0] + "/ i")は常に-1 – Tikuan

+0

を返します。 – Tikuan

2

searchRegExp objectを期待ロードウェブページにスクリプトを注入されているWebページもHOWTOキャッチスクリプトから削除できます。だから、これを試してみてください。

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

あなたはあまりにも文字列を渡すことができますが、new RegExp(string)ようのRegExpオブジェクトを作成する使用されますが、あなたはそれで修飾子を設定することはできません。

さらに、.のような正規表現の特殊文字をエスケープする必要があります。あなたはそうするために、このメソッドを使用することができます。

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

は.Matchを使用してみてください、と私は正規表現がどのように見えるしなければならないと信じて:

/scriptslink[i]/i 
+0

これは正規表現のリテラルです。 'scriptslink [i]'の部分は配列として扱われません。 –

+0

Box9は正解ですなぜこのような表記法を使用しようとしたのですか:p(これは/ scriptslink [i]/iブラインドヒント)タイ語は正しいです(上記)彼の表記はまさに私が必要とするものです – Tikuan

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

これはありませんあなたのためにあなたの答えは – Tikuan

関連する問題