Jeśli utworzysz skrypt Greasemonkey z @include *
i przejdziesz do witryny takiej jak youtube, skrypt będzie uruchamiany 20+ razy przy każdym odświeżaniu. To jest na Firefox, nie jestem pewien co do Chrome.
Czy istnieje sposób, aby temu zapobiec?Uruchamiaj skrypt Greasemonkey tylko raz na wczytywanie strony?
Odpowiedz
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.
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
tylko sprawdzonych youtube, było znacznie mniej iframes. moją sugestią jest "GM_log (location.href)" i wąskie @include. –
To rozwiązało mój problem. Dzięki! – Joren
@Joren: Nie ma za co. Miło, że mogłem pomóc. –