Hackathon
I led the front-end development of a
Chrome extension
designed to detect and highlight persuasive language on webpages,
enhancing user awareness and interaction with digital content. My work
centered on building a custom HTML parser using a
depth-first pre-order traversal algorithm to efficiently
identify top-level tags that typically contain text. By utilizing a
NodeIterator, I was able to perform targeted mutations on text nodes, ensuring
that the extension could accurately identify and process relevant
content.
One of the most challenging aspects of the project was tracking and
responding to DOM mutations in real time. Initially,
the extension only highlighted content from the initial page load,
which proved insufficient for dynamic sites that load content
asynchronously or feature interactive elements like paginated
information and expandable comments. To overcome this, I implemented a
MutationObserver
to monitor changes and update highlights as new elements were
introduced. This approach, however, presented its own challenges.
Modifications triggered by the MutationObserver occasionally led to an
endless recursive loop, as each mutation spawned further observations.
I resolved this issue by constraining the mutations to only the nodes
that required highlighting and by checking for pre-existing
highlighted elements using their class names, effectively breaking the
recursive cycle.
In addition to solving DOM mutation challenges, I addressed complex
race conditions by employing a promise queue paired
with an event listener/subscriber system to manage
asynchronous updates. This strategy prevented recursive back-end API
calls during rapid DOM changes, ensuring that the extension remained
responsive.
In conclusion, this project enhanced my skills in dynamic DOM
manipulation.
- JavaScript
- HTML
- CSS