html, javascript, odbiór parametrów w niezmienionym stanie
URLSearchParams
, z formularza FormData
, a do przekazania/odbioru złożonych struktur pomiędzy podstronami trzymaj je w sessionStorage
/localStorage
po serializacji JSON.stringify()
. encodeURIComponent()
Number()
, JSON.parse()
). JSON.parse()
– wtedy stan jest faktycznie „niezmieniony”.1.1 Query string (?id=12&status=ok
)
1.2 Hash fragment (#step=3
)
1.3 Ciało formularza (POST
/ GET
)
1.4 Web-Storage (localStorage
, sessionStorage
)
1.5 Cookies / Service-Worker Cache / IndexedDB (rzadziej do krótkotrwałego routingu)
1.6 API inter-component (np. postMessage
, BroadcastChannel
) – SPA
Mechanizm | Co dociera do odbiorcy | Zachowanie typów | Ograniczenia |
---|---|---|---|
URLSearchParams | String (UTF-8, percent-encoded) | Brak – zawsze string | długość < ~2 kB, widoczne w lokatorze |
Hash | String | jw. | brak wysyłki na serwer, łatwe do nadpisania „w tył” |
FormData (GET) | String | jw. | jw. + wpływ encType |
FormData (POST multipart) | Binary/String | częściowy | serwer pośredniczy, brak dla client-side routingu |
Web-Storage | String → dowolny po JSON.parse | Pełne po serializacji JSON | ~5-10 MB, podatne na XSS |
Cookies | String | jw. | 4 kB/ciastko, wysyłane na serwer, wymogi RODO, Secure/HttpOnly |
postMessage / BroadcastChannel | Structured Clone | Pełne – przeglądarka klonuje strukturę | tylko w obrębie originu / zakładki |
3.1 URL (proste flagi, identyfikatory)
// wysyłka
const q = `product=${encodeURIComponent(prodId)}&view=${mode}`;
location.href = `details.html?${q}`;
// odbiór
const p = new URLSearchParams(location.search);
const id = Number(p.get('product')); // konwersja
const view = p.get('view'); // string
3.2 Złożony obiekt (koszyk, konfigurator) – sessionStorage
// zapisz
sessionStorage.setItem('cart', JSON.stringify(cartObj));
// przejdź
location.href = 'checkout.html';
// odbiór
const raw = sessionStorage.getItem('cart');
const cart = raw ? JSON.parse(raw) : null;
3.3 Wielokrotne wartości / tablice w URL
// ?tag=js&tag=html lub ?tag[]=js&tag[]=html
[...p.getAll('tag')]; // ['js','html']
3.4 Hash router w SPA
addEventListener('hashchange', () => {
const state = Object.fromEntries(new URLSearchParams(location.hash.slice(1)));
});
encodeURIComponent
, unika kolizji z &
, ?
, #
.decodeURIComponent
wywoływany implicite w URLSearchParams
.escape()
(przestarzała).function assertEqual(src, rx) {
console.assert(JSON.stringify(src) === JSON.stringify(rx), 'Dane zmienione!');
}
Uruchom na końcu procesu przekazywania.
Number(v)
lub parseInt/parseFloat
v === 'true'
JSON.parse(p.get('cfg'))
z wcześniej encodeURIComponent(JSON.stringify(cfg))
URL
/ URLSearchParams
(pełne wsparcie we wszystkich Evergreen browsers). history.pushState()/replaceState()
+ popstate
– dynamiczna zmiana parametrów bez przeładowania. react-router
, vue-router
, Angular) – automatycznie typują parametry. IndexedDB
i Storage Foundation API
(większe, transakcyjne). zodios
, serde-qs
) by walidować i odtwarzać typy w TypeScript.localStorage
(łatwy dostęp JS). Zamiast tego cookie
+ HttpOnly
lub sesja serwerowa. localStorage
atakujący może wstrzyknąć payload.getParam<T extends number|string|boolean>()
+ guardy. URLSearchParams
) – polyfill lub własny parser. localStorage
(cart_v2
) by móc bezpiecznie migrować.same origin
) – testuj kolizje. postMessage
, SharedArrayBuffer
) dla zaawansowanego współdzielenia stanu. localStorage
. URL Pattern
API (proposal) – deklaratywne mapowanie routingu do parametrów. query-string
, qs
, superjson
(zachowuje daty, mapy, sety).Aby odebrać parametry „w niezmienionym stanie”:
URLSearchParams
+ konwersja typów. sessionStorage
/localStorage
z JSON.stringify/parse
. encodeURIComponent
) i walidację typów przy odbiorze.