Hejto.plDodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika mike-litoris w Programowanie

Kosmonauta

w Programowanie

3piorunów

pytałem na diskordzie ale tam idą dyskusje na głębokie tematy, także spróbujemy tutaj.

#javascript #html

Jeszcze na łykopie przed ostatnią aktualizacją napisałem sobie prosty userscript do czarnolistowania. Działał na tej zasadzie że po załadowaniu strony brał predefiniowaną tablicę na przyklad tagów

var tagi=['przegryw','kononowicz'];

function schowaj_taga(item,index) {

let tag=$('div.d⁎⁎a p a[href="łykop/' + item +'"]' );

tag.remove() }

oczywiście upraszczam, ale efekt tego był taki że usuwane były całe gałęzie drzewa DOM no i było fajnie, dobry przekaz leciał.

W przypadku hejto jak próbuję zrobić to samo z elementem article to jest spoko póki nie dotknę paginacji. Frontent nie "reloaduje" dokumentu tylko usuwa kontekt zmiędzy obecnych <article> i wstawia nowy. Jeśli FE oczekuje 20 elementów article a ja zdążę usunąć 4 z nich to kolejny request o uzupełnienie treści wywali błąd 500.

Zastanawiam sie jak do tego podejść.

Komentarze (19)

Kompan1piorunów

Zobacz może tutaj: https://stackoverflow.com/questions/629671/how-can-i-intercept-xmlhttprequests-from-a-greasemonkey-script - po bożemu pewnie byłoby podpiąć się na requesty, które pobierają nowe posty i jak zwrócą odpowiedź (więc też załadują się na stronie) to wtedy odpalać skrypt. Ale nadal zrobiłbym setInterval, bo jest łatwiej i działa, a jak coś prostego działa to po co się przemęczać :grinning:

Kosmonauta0piorunów

@kocurio wiem wiem, ale nie cierpię takiej guwnorzeźby. to jeden z moich OCD -jak coś robię to ma to być zrobione dobrze, bo parafrazując mema już wpiszę do eksela i tak zostawię.

Kompan1piorunów

Zawsze możesz zrobić na pałę i ustawić sobie, żeby skrypt się odpalał np. co sekundę, przy pomocy setInterval - nie jest to za bardzo po bożemu, ale powinno działać :smiley: A to na tyle drobny skrypt, że nie powinno to jakoś wpłynąć na prędkość działania strony.

Specjalista0piorunów

@mike-litoris MutationObserver informuje, gdy zmieniają się elementy zawarte w kontenerze, który obserwujesz, czyli musisz patrzeć jeden poziom wyżej - na element, w którym się pokazują artykuły.

Kosmonauta0piorunów

@Magiczny_Magik ja nie jestem zbyt bystry jeśli o JS chodzi (jakbym w czym innym był bieglejszy xD), cośtam ulepię ale bez reweli i dogłębnego zrozumienia jak coś mogę zrobić lepiej.

picrel: ramka się dodaje (bo wiadomo, bezpośrednio dzialam na dokumencie), ale żadna interakcja z pierwszy artykułem, nie rzuca niczym w konsolę, chyba nie tędy droga.

Gruba ryba0piorunów

@mike-litoris Niby widzę literki i słowa, ale coś jakoś nie trafia do mnie ich sens i znaczenie xD A mogłem bardziej uważać na tych studiach xD

Kosmonauta1piorunów

ej erjotka @rj45 jesteś tutaj wariacie?

Specjalista0piorunów

Może MutationObserver pomoże?

Kosmonauta1piorunów

@lubieplackijohn nie, bo ja operuję (próbuję xD) na innym poziomie.

API to źródło danych (i sposób na interakcję z częścią serwerową aplikacji), a mój dylemat rozgrywa się w webowym frontendzie.
Ktoś (mędrsi od nas xd) napisał aplikację która komunikując się z API wyświetla w przeglądarce to co właśnie czytasz. Ja chcę "wpiąć" się z dodatkową funkcją która odpali się po tym jak już wszystko się wczyta i wpłynie na wyświetlaną treść.

Kosmonauta0piorunów

@lubieplackijohn panie, to są zapracowane ludzie, poprzednie moje pytaine pozostało bez odezwu do teraz, a mama zawsze mówiła "nie wpierdalaj się tam gdzie cię nie chcą guwniarzu.zasrany.zajebany"

Gruba ryba0piorunów

@mike-litoris Kurde, pomógłbym, jakbym umiał :neutral_face: Ciśnij proszę na dc adminów!

Kosmonauta0piorunów

@To_uff doceniam wkład, ale tu jest inna kolejność.
klikam w paginację, skrypt myśli, zmienia urla, przewija viewport na samą górę i dopiero podmienia treści w article.
Potrzebny były event który jest dispatchowany PO podmiance wszystkich article'i. Coś jak body.onLoad tylko że customowe dla tego konkretnego skryptu.

@lubieplackijohn @hejto da radę podrzucić jakąś wskazówkę?

Kompan1piorunów

@mike-litoris https://stackoverflow.com/questions/3522090/event-when-window-location-href-changes

może w ten sposób się uda. za kazdym razem zmienia sie url, jak zmienia sie widoczny feed

Kosmonauta1piorunów

@To_uff update:

no miałeś rację z tymi displayami
var art=document.querySelectorAll('article')
art.forEach(function(item,index){item.style.display="none"});

po czymś takim, po zmianie strony w paginacji kolejna ładuje się już "od zera", nie wywalając błędu.
Teraz pytanie pod jaki event podpiąć tę funkcję odraczającą portal ;d

Kosmonauta1piorunów

@To_uff
> css

ja wiem że to edge case ale jeśli schowam element w którym embedowany będzie np jakaś animacja w svg (był swego czasu taki problem na lurkerze) to ta animacja nadal będzie mi żreć CPU. Jasne, spróbuję z inline'owym stylem ale docelowo chcę usuwać kontent a nie tylko go ukrywać.

> zdarzenie.

No własnie, też nie wiem jak to rozbroić ;d. dev toolsy w chromie pokazują mi że pod każdy element (przycisk, pole) podpięte jest ze 40 event listenerów. Nienawidzę JSa ;d

Kompan2piorunów

do tego musisz wylapac w jakis sposob zdarzenie kiedy odswieza sie lista, by resetowac display, gdy odswiezy sie content w article, bo niektóre wpisy będą niepotrzebnie schowane

Kompan1piorunów

może zmień im w css display na none zamiast usuwac