Zapętlenie funkcji zmiany tytułu strony w JQuery

0

Witam

W jaki sposób mogę zapętlić funkcję zmieniającą tytuł strony, jeżeli mamy otwartą kartę ze stroną ale jesteśmy na innej karcie, bo mój skrypt mi działa ale tylko tak jakby raz :/ Możecie pomóc?

setInterval(function(){
  var message = "Wróć do nas :)!";
    var original;

    $(window).focus(function() {
      if(original) {
        document.title = original;
      }
    }).blur(function() {
		 document.title = original;
      var title = $('title').text();
      if(title != message) {
        original = title;
      }
      document.title = message;
    });
}, 2000);
1

Nie rób tego. To wyjątkowo wk... funkcja, która utrudnia zorientowanie się, co mamy w której karcie otwarte.
Na niektórych stronach celowo takie g... blokuję.

0

@Freja Draco:
Pomijajac fakt że to irytuje ale jak to zapętlić?

2

W jakim celu chcesz to zapętlać? jak podpinasz zdarzenia, to się powinny odpalić za każdym razem. Jeśli masz wątpliwości to możesz zrobić coś takiego:

$(window).focus(function() {
   console.log("dupa blada");

i otworzyć konsolę, czy dana funkcja się uruchomiła.

A tworząc "pętlę" (czyli tak jak teraz masz - z użyciem setInterval) podpinasz cały czas nowe handlery zdarzeń i na dodatek masz tam zmieniający się stan, który zapewne się konfliktuje z poprzednimi podpiętymi już handlerami, więc nic dziwnego, że ci coś nie działa. Więc ten setInterval należałoby wywalić.

co do logiki zmieniania tytułu, to czy nie możesz to jakoś prościej zrobić?

Np. tak:

    var message = "Wróć do nas :)!";
    var original = document.title;

    $(window).focus(function() {
       document.title = original;
    }).blur(function() {
       document.title = message;
   });

(albo coś podobnego - tylko nie sprawdzałem, czy mój sposób faktycznie działa. No ale to chyba najprościej by było).

BTW tak wygląda kawałek mojego paska przeglądarki - powodzenia ze zmienianiem tekstu. No chyba, że inni ludzie nie są tacy turboprzeglądacze... Ale coś w tym jest, że wiele stron zamiast zmieniać tekst, to zmienia ikonkę strony (jak to widać w pierwszym tabie - gdzie jest Discord) screenshot-20201221222104.png

0

@LukeJL: chce zapętlić by zmieniało tytuł co sekundę z tytułu oryginalnego na ten tekst jeżeli jesteś poza tą kartą tak jak tutaj https://www.isprzet.pl/pl/

2

możesz w handlerze zdarzenia blur dodać setInterval (w środku handlera, a nie tak jak teraz), który będzie zmieniał tytuł. Natomiast w handlerze zdarzenia focus możesz kasować ten interval za pomocą clearInterval.

Tylko tak jak @Freja Draco napisała - możesz tym zirytować użytkownika (a np. jak mnie denerwuje jakaś strona nachalnymi reklamami, powiadomieniami, dźwiękiem itp. to ją wyłączam). To jeszcze ma sens na stronach typu FB czy innych, na które ludzie sami z własnej woli chcą wchodzić i są zainteresowani powiadomieniami (bo FB też jakoś miga tytułem). Ale wtedy to coś przekazuje, że pojawiła się nowa wiadomość, a nie ot tak.

0
<script>
(function(){
  var message = "Wróć do nas :)!";
    var original;

    $(window).clearInterval.focus(function() {
      if(original) {
        document.title = original;
      }
    }).setInterval.blur(function() {
         document.title = original;
      var title = $('title').text();
      if(title != message) {
        original = title;
      }
      document.title = message;
    }, 2000);
});
</script>

Niestety nie chce mi to działać

1 użytkowników online, w tym zalogowanych: 0, gości: 1