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)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/