2010-11-16 21 views

Odpowiedz

35

Po pierwsze, prawdopodobnie nie chcesz, aby skrypt działał w iFrames.
Można zablokować że używanie the @noframes directive który teraz działa w obu Greasemonkey i Tampermonkey począwszy od października 2014 r

Dla starszych wersji, lub do silników skryptów, które nie obsługują @noframes, można użyć tego kodu, tuż po blok metadanych:

if (window.top != window.self) //don't run on frames or iframes 
{ 
    //Optional: GM_log ('In frame'); 
    return; 
} 


po drugie, można czekać i ogień kod GM, raz na stronie obciążenia. Zawijać wszystko w main() i nazywają to na razie load, tak:

window.addEventListener ("load", LocalMain, false); 

function LocalMain() { 
    // Your code goes here. 
} 


trzecie, można wykluczyć strony lub stron, dodając // @exclude dyrektyw do bloku metadanych.

Ogólnie rzecz biorąc, najlepiej unikać uniwersalnych skryptów GM, jeśli to możliwe.

Inne metody mogą ustawiać flagi lub ponownie ładować stronę z parametrami adresu URL. Te stają się trudne, więc zachowaj je w ostateczności.

+1

tylko sprawdzonych youtube, było znacznie mniej iframes. moją sugestią jest "GM_log (location.href)" i wąskie @include. –

+1

To rozwiązało mój problem. Dzięki! – Joren

+2

@Joren: Nie ma za co. Miło, że mogłem pomóc. –

0

Można na przykład zapisać podaną lokalizację w zmiennej trwałej. Po załadowaniu strony należy sprawdzić, czy bieżąca lokalizacja jest już zapisana w tej zmiennej.

Jeśli nie, ustaw zmienną i uruchom swoją funkcję, jeśli tak, nic nie rób.

Jak przechowywać zmienne persistent: GM_setValue

Powiązane problemy