2009-11-05 12 views
8

Zastanawiam się, czy można uruchomić Greasemonkey tylko w elemencie iframe, a nie w oknie nadrzędnym. Okno nadrzędne to domena A, iframe to domena B, a uwzględnienie w skrypcie to @include http://domain-B.com/path/ *.Greasemonkey przeciwko iframe przy użyciu @include - czy to działa?

Nie potrzebuję żadnej interakcji z rodzicem. Próbowałem tego kilka razy bez powodzenia. Czy istnieje ograniczenie między domenami uniemożliwiające wykonanie komendy przeciwko elementowi iframe?

PS: Element iframe ma kod JS, który uniemożliwia jego załadowanie jako górnego okna.

Odpowiedz

11

Cóż, na pewno można uruchomić Greasemonkey, aby działał na elemencie iframe - w rzeczywistości jest to common question, aby określić, w jaki sposób powstrzymać go przed uruchamianiem na elementach iframe, a także na stronie głównej. Powinieneś być w stanie podjąć przeciwnego tej odpowiedzi, aby zapobiec kod wykonywany w górnym oknie:

if (window.top == window.self) //don't run on the top window 
    return; 
//rest of the actual executing code goes here 

Przetestowałem go i można korzystać @include dopasować domeny B (domenę iframe) i uruchom fragment arbitralnego kodu, który go modyfikuje. Uruchomiłem następujący testowy test na urządzeniu test page i pomyślnie ukryłem logo Google (tylko wtedy, gdy Google jest w wersji iframe).

// @include http://www.google.com* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 
// ==/UserScript== 

if (window.top == window.self) //don't run on top window 
    return; 

alert('running on a frame'); 

$('img').each(function() { 
    $(this).hide(); 
}); 

O ile wiem, nie ma tutaj żadnych ograniczeń między domenami. Nie jestem pewien, co się stanie, jeśli iframe nie jest obecny, gdy strona jest ładowana po raz pierwszy (co jest, gdy działa Greasemonkey).

+0

Domena-nigdy nie jest wykonywana jest problemem z powodu ograniczeń między domenami w przeglądarce. Ograniczenia między domenami i brak dostępu do źródła w domenie-b Nie mogę odczytać DIV, aby stwierdzić, czy coś istnieje. Miałem nadzieję, że domena @include b uruchomi się na elemencie iframe (który jest domeną b) i dlatego będę miał dostęp do znaczników za pośrednictwem skryptu GM. Będę nadal badać różne podejścia. – nopuck4you

+0

Cóż, zadziałało to dla mnie: mogę uzyskać skrypt Greasemonkey do wykonania na zewnętrznej domenie 'iframe' kiedy' @ include' tylko domenę 'iframe'. Zaktualizowałem swoją odpowiedź za pomocą przykładowego kodu i strony testowej, aby ją wypróbować. – npdoty