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).
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
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