Alza začala celkom zmrdsky zobrazovať sponzorované výsledky na prvých miestach v zozname tovaru. To je samozrejme absolútne neprípustné. Keďže nemôžem dolámať ruky tomu idiotovi, čo to schválil, tak som sa venoval druhej najlepšej možnosti - ako to správne skryť.
Jednoduché a nedostatočné riešenie: V uBlock Origin treba do
My filters pridať nasledovné pravidlo:
Kód: Vybrať všetko
alza.sk##.browsingitemcontainer > .browsingitem:has(.sponsoredcommodity)
Prečo je to nedostatočné riešenie? Skryje to tie prvé dva výsledky (<div>) a poposúva to jednotlivé divy, takže sa rozbije počítanie divov = nekorektne sa aplikuje CSS. Ako vidno na priloženom obrázku, prvé dva výsledky nemajú v hornej časti gradient (správne; oranžový rámček) ale druhé dva v prvom riadku už ten gradient majú (nesprávne; zelený rámček). Navyše v strede chýba vertikálna čiara (červený rámček), keďže predtým to bolo na kraji, kde sa nevykreslovala. Možno to však niekomu bude stačiť.
Správne riešenie: Vyššie uvedené sa nedá fixnúť v uBlock Origin, lebo treba prepočítať divy = injektovať JavaScript kód. Takže treba použiť ViolentMonkey / GreaseMonkey / TamperMonkey alebo kto má Brave browser (ako ja), tak Custom scriptlets + Custom filters. UserScript na toto celé je tu:
Kód: Vybrať všetko
// ==UserScript==
// @name Alza - do psej matere s reklamami
// @match https://www.alza.sk/*
// @match https://www.alza.cz/*
// @run-at document-idle
// @grant none
// ==/UserScript==
(function () {
let cols = 0;
function fix(container) {
const before = [...container.children];
if (!cols) { // learn the grid width from the site itself
const i = before.findIndex(el => el.classList.contains('last'));
cols = i >= 0 ? i + 1 : 4;
}
let changed = false;
for (const item of before) {
if (item.querySelector('.sponsoredcommodity')) { item.remove(); changed = true; }
}
if (!changed && !container.dataset.alzaFixed) return;
container.dataset.alzaFixed = '1';
[...container.children].forEach((item, i) => {
item.classList.toggle('firstRow', i < cols);
item.classList.toggle('last', i % cols === cols - 1);
});
}
const run = () => document.querySelectorAll('.browsingitemcontainer').forEach(fix);
let queued = false;
new MutationObserver(() => {
if (queued) return;
queued = true;
requestAnimationFrame(() => { queued = false; run(); });
}).observe(document.documentElement, { childList: true, subtree: true });
run();
})();
Kto používa VM / GM / TM, nech si naimportuje skript. Kto používa Brave browser a chce to mať pekne čisto bez TM/VM, tak treba ísť do
brave://settings/shields/filters, aktivovať
Developer mode, pridať
Custom scriptlet (nie Custom filter), tam pastnúť tento kód a pomenovať ho. Súbor bude mať vždy prefix "user-" (takže napríklad
user-antialza.js). Kedže Brave ignoruje hlavičku v UserScripte a nevyhodnocuje @match, treba mu ručne nastaviť aktiváciu toho skriptu na stránke. Do
Custom filters treba pridať dve pravidlá a následne zmeny uložiť
Save changes tlačítkom:
Kód: Vybrať všetko
alza.sk##+js(user-antialza.js)
alza.cz##+js(user-antialza.js)
Na prezeranie priložených súborov nemáte dostatočné oprávnenia.