Wpis użytkownika mike-litoris w Programowanie
mike-litorisKosmonauta
3piorunówpytałem na diskordzie ale tam idą dyskusje na głębokie tematy, także spróbujemy tutaj.
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)
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:
@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ę.
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.
@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.
@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.
@mike-litoris Jest na dc w razie czego, czasem nawet odpisuje!
@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
ej erjotka @rj45 jesteś tutaj wariacie?
Może MutationObserver pomoże?
@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ść.
@mike-litoris A w dokumentacji api coś się nie znajdzie?
@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" #pdk
@mike-litoris Kurde, pomógłbym, jakbym umiał :neutral_face: Ciśnij proszę na dc adminó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ę?
@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
@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
@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
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
może zmień im w css display na none zamiast usuwac