2012-05-12 11 views
0

jQuery appendTo('body')を使用するGreasemonkeyスクリプトを作成しました。
すべて正常に機能していますが、HTMLはGoogleの広告やガジェットなどの他のDOM要素にも追加されています。Jquery appendTo( 'body')は、Greasemonkeyで使用すると複数の挿入を行います

これを修正する方法はありますか?私はいくつかのサンプルコードがこの問題に必要であるとは思わない。

my igoogle page


あなたが見ることができるように、私の追加HTMLは、さまざまな場所に現れる:代わりに、私は私の問題を示して画像をアップロードしました。

+0

私はappendToのようなものが必要でしょう: -/ –

+0

'appendTo($( 'body')[0])' –

答えて

2

はい、これはGreasemonkeyのは、独自のページとして各frameiframe(ように、それがある)扱い、@include@excludeとして実行され、及び/又は@matchディレクティブが示すことに起因します。
src属性のないiframeは、ベースページと同じURLからのものとみなされます。)

は、あなたのスクリプトの先頭近くでこのコードを配置し、アイフレーム上のトリガからスクリプトを停止するには、次の

if (window.top != window.self) //-- Don't run on frames or iframes. 
    return; 


あなたが実際にいくつかのiframeではなく実行したい場合可能であれば@include@exclude、および/または@matchディレクティブを調整するか、ターゲットページにリンクして、iframeを選択的にブロックする方法を選択するのに役立ちます。

2

あなたのHTMLが複数のアイテムに追加されているのは、あなたが扱っているマークアップにiframeが存在するためです。

各iFrame(ガジェット、広告はiFramesと思われる)は、それぞれ<html></html><body></body>というタグを持つ完全なHTML構造を持っています。 .appendTo('body')の場合、スクリプトは'body'セレクタに一致する要素にコンテンツを追加します。

$('body')よりも一意のセレクタを使用すると便利です。あなたがしたいかもしれないもの


ジェネリックbodyセレクタに加えて、他のユニークなセレクタのいくつかの並べ替えの$('body:first')を使用してみてくださいです。あなたがコントロールしていないHTMLに依存しているので、これを少しだけプレイしなければならないかもしれません - GMスクリプトを任意のページで実行したいと思います - そのページの構造に制限されています。たとえば、:first<body>というタグが正しいと保証されるという保証はありません。

あなたが私に尋ねる場合、これを行うための確かな方法は、のすべての要素に対して繰り返すことです。$('body')が返され、それぞれにIframeの親要素があるかどうかがわかります。このような

何か -

var selectedElement = ''; 
$('body').each(function(index,elem){ 
    if ($(elem).closest('iframe').length){ 
    selectedElement = $(elem); 
    } 
}); 

if (selectedElement){ 
    // appendTo(selectedElement); 
} 

  • 私は指定されたセレクタに一致するすべての要素を反復処理するために.each() functionを使用している - この場合は - bodyを。

  • ここで.closest() functionを使用して、すべての親要素をナビゲートし、指定したセレクタに一致する祖先(この場合はiframe)を探します。

+0

のように試してくださいありがとう、私は知っていますが、どうすればいいですか?セレクタは$( 'body')よりユニークで、すべてのページに存在しますか? –

+0

$( 'body:first')は問題を解決しません。私が試すことができるセレクタのリストはありますか?または、iframeにない本体を選択する必要があります。 –

+0

[ありがとリストあり](http://api.jquery.com/category/selectors/) – Lix

関連する問題