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
- 1. Skrypt Greasemonkey działa tylko po przeładowaniu strony
- 2. Fire Greasemonkey skrypt na żądanie AJAX
- 3. Uruchamiaj raz dziennie
- 4. Uruchamiaj zadanie raz w tygodniu na Heroku
- 5. Uruchamiaj fragment kodu tylko raz, gdy aplikacja jest zainstalowana.
- 6. W tym skrypt Greasemonkey w wielu domenach
- 7. Uruchamiaj skrypt Pythona w przyszłości
- 8. Uruchamiaj każdą klasę, ale raz dla grupy
- 9. Dlaczego mój skrypt Greasemonkey nie jest aktualizowany?
- 10. Jak mogę przekonwertować skrypt Greasemonkey na restartowy dodatek Firefox?
- 11. Uruchamiaj skrypt po zatrzymaniu okna dokowanego.
- 12. Uruchamiaj skrypt Pythona na starcie węzła sieci Web (nw.js)
- 13. Uruchamiaj tylko podpisane skrypty powershell z C#
- 14. Dlaczego greasemonkey nie wykrywa niektórych zmian strony na Facebooku?
- 15. Greasemonkey - poczekaj na załadowanie strony przed wykonaniem technik kodu
- 16. Tylko pętle Foreach Loop raz
- 17. Uruchamiaj polecenia git na pilocie?
- 18. Dostęp do zmiennych z Greasemonkey do strony i odwrotnie
- 19. Uruchom setUp tylko raz
- 20. view.getDrawingCache() działa tylko raz
- 21. layoutAnimacja działa tylko raz
- 22. .replaceWith() działa tylko raz
- 23. Tylko jeden przycisk radiowy wybrany na raz
- 24. Zastąp element na liście tylko raz - Haskell
- 25. zadziałać tylko raz na funkcję przewijania (scrollstop)
- 26. Funkcja wywołania na przewijanie tylko raz
- 27. Javascript działa tylko raz (nawet po raz drugi po odświeżeniu strony) w aplikacji Railsowej
- 28. jQuery - Zrób tylko raz
- 29. onPreviewframe tylko wywoływana raz
- 30. Uruchamiaj Doxygen tylko w wybranych plikach/modułach?
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. –