Allegro Seller Info 0.1.13
• tech • 319 słów • 2 minuty czytania
Po powrocie ze Śląska i w jakimś sensie prawie tygodniowym detoksie od kompa i sieci, pierwszą rzeczą jaka przykuła moją uwagę było niedziałanie UserScript-a na Allegro. No to już dowiedziałem się jaka będzie moja pierwsza czynność do wykonania - naprawienie tego skryptu i wypuszczenie nowej wersji (0.1.13).
Zauważony problem to brak wyświetlania informacji na listach z ofertami. Po zajrzeniu do konsoli widać, że znów zmieniła się ścieżka do obiektu item
w bebechach react-a danego elementu (<article/>
), bo leci jakiś undefined
. To samo poprawiałem w poprzedniej wersji.
Tym razem jednak zamiast znów aktualizować ścieżkę odwołań do nowej postaci w stylu:
item = node[i].children[0].props.children[0].props.item;
postanowiłem zrobić coś bardziej generycznego, co pozowali uniezależnić się od podobnych zmian w przyszłości.
Po szybkim researchu okazało się, że łatwo można dostać się do wewnętrznej instancji obiektu komponentu React-a i jego “propsów”. Tym sposobem zaktualizowałem swój kod odpowiedzialny za szukanie obiektu z właściwościami aukcji.
Na początek dostęp do stanu komponentu z poziomu DOM “bazowego” elementu aukcji:
// get react component
var item = node[Object.keys(node).find(key => key.startsWith('__reactInternalInstance$'))];
if (!item || !item.return || !item.return.stateNode)
continue;
item = item.return.stateNode;
A w dalszej kolejności do poszukiwanego obiektu w props-ach:
// get item props
if (!item || !item.props || !item.props.item)
continue;
item = item.props.item;
Te continue
to taki “early return” - przeskakuje do kolejnych iteracji, bo kod ten kręci się w pętli po elementach listy ofert. Zmiany wprowadziłem inline w miejscu starego kodu, a lepiej pewnie byłoby gdybym tę logikę pobierania obiektu wpakował w jakiś funktor… ale “update” już poleciał, więc tak też zostało…
Może kiedyś też zmienię sposób szukania miejsca do wstrzyknięcia mojego kodu na bardziej generyczny. Zamiast sztywnych skoków po DOM-ie, jak jest obecnie. Ale to może dopiero jak jeszcze kilka razy zmieni się struktura strony i nie będzie to jakoś upierdliwe do szybkiego napisania.
No, “update” już poleciał to auto-aktualizacje powinny zając się resztą. Kod wszystkich wersji można także znaleźć bezpośrednio w moim gitowym repozytorium UserScripts na GitHubie.
Komentarze (0)