TenArchive

2026-10-05 · IT / WEB · PORADNIK

W tym wpisieustal, co oznacza lokalnieBase64 to bajty, nie tajny tekstwyświetlaj tekst bez jego wykonywaniaodliczanie powinno mierzyć czaszostaw miejsce na zwykły HTML

ustal, co oznacza lokalnie

Notatnik w Random odczytuje pole tekstowe i aktualizuje wynik. Nie wykonuje zapytań sieciowych, nie używa cookies, localStorage ani zapisanej historii danych wejściowych. Odświeżenie czyści zawartość. To właściwość kodu narzędzia, nie zapewnienie dotyczące rozszerzeń przeglądarki, historii schowka czy całego komputera.

Lokalne narzędzie może też pozostać małe. Natywne pola obsługują klawiaturę i zaznaczanie bez frameworka. Widoczna etykieta oraz spokojny komunikat o wyniku są bardziej użyteczne niż rozbudowane animacje.

Base64 to bajty, nie tajny tekst

Base64 jest odwracalną reprezentacją bajtów, nie szyfrowaniem. JavaScriptowe btoa() nie obsługuje bezpośrednio dowolnego tekstu Unicode. Polskie znaki i emoji są dobrym testem: najpierw zamień tekst na bajty UTF-8.

const bytes = new TextEncoder().encode(text);
let binary = ;
for (const byte of bytes) {
  binary += String.fromCharCode(byte);
}
const encoded = btoa(binary);

Dekoduj w przeciwnym kierunku: atob() na bajty, potem new TextDecoder("utf-8", {fatal: true}). Tryb fatal odrzuca błędny UTF-8 zamiast po cichu wstawiać znaki zastępcze. Narzędzie przyjmuje standardowy Base64 z dopełnieniem i białymi znakami, nie wszystkie warianty URL-safe. Limit wejścia ogranicza skutki przypadkowego wklejenia ogromnego tekstu.

wyświetlaj tekst bez jego wykonywania

Zdekodowany ciąg może zawierać HTML. Użycie innerHTML zmieniłoby narzędzie tekstowe w interpreter HTML-a. Każdy wynik wstawiaj przez textContent:

output.textContent = decodedText;

Zakoduj i zdekoduj <img src=x onerror=alert(1)>. Wynik powinien być widocznym tekstem, nigdy obrazem ani wykonywanym zdarzeniem. Następnie wykonaj pełny cykl dla Zażółć gęślą jaźń 🐸, sprawdź puste wejście i błędny Base64. Te przypadki testują rzeczywiste źródła błędów, nie tylko najprostszy scenariusz.

odliczanie powinno mierzyć czas

Przeglądarki ograniczają timery w kartach działających w tle. Odejmowanie sekundy przy każdym wywołaniu setInterval() może powodować dryf. Zapisz bezwzględny termin i przy każdej aktualizacji oblicz różnicę:

const deadline = Date.now() + 25 * 60 * 1000;
const secondsLeft = Math.max(0,
  Math.ceil((deadline - Date.now()) / 1000));

Interwał tylko odświeża widok; nie wyznacza czasu. Powrót do karty daje poprawny pozostały czas. Zmiana zegara systemowego nadal może wpłynąć na taki licznik; to wystarcza do prostego skupienia, ale nie do precyzyjnego benchmarku. Sekundowego odliczania nie umieszczaj w agresywnym regionie live czytnika ekranu.

zostaw miejsce na zwykły HTML

JavaScript jest potrzebny do narzędzi, ale nie do czytania wpisów i otwierania linków. Dodaj krótką informację no-script, widoczne kontrolki i jasny komunikat o nieprawidłowych danych. Nie zbieraj statystyk użycia tylko dlatego, że jest to łatwe.

MDN — TextEncoderMDN — TextDecoderMDN — textContent