diff --git a/packages/userscript/src/main.ts b/packages/userscript/src/main.ts index cbe2ae3..010ac60 100644 --- a/packages/userscript/src/main.ts +++ b/packages/userscript/src/main.ts @@ -9,8 +9,6 @@ const twitterIconSvgInner = '' -// const twitterIconSvg = `` - const linkMap: Record = { 'mask-icon': 'https://abs.twimg.com/responsive-web/client-web/icon-svg.168b89da.svg', 'shortcut icon': '//abs.twimg.com/favicons/twitter.2.ico', @@ -20,10 +18,11 @@ const metaMap: Record = { 'apple-mobile-web-app-title': 'Twitter', } +const checkedElements = new WeakSet() + function main() { + injectStyle() onloadSafe(() => { - injectStyle() - const placeHolderIconSelector = '#placeholder > svg' replaceIcon(placeHolderIconSelector, 'twitter-blue') @@ -43,8 +42,8 @@ function main() { // Fuzzy matching for all 𝕏 icons sentinel.on('svg', (svg) => { - if (svg.getAttribute('data-replaced') === 'true') return - svg.setAttribute('data-replaced', 'true') + if (checkedElements.has(svg)) return + checkedElements.add(svg) if (svg.innerHTML === xIconSvgInner) svg.innerHTML = twitterIconSvgInner if (svg.innerHTML === xIconInNotification) svg.innerHTML = twitterIconSvgInner @@ -111,8 +110,8 @@ function injectStyle() { function replaceIcon(selector: string, applyStyle?: string) { sentinel.on(selector, (svg) => { - if (svg.getAttribute('data-replaced') === 'true') return - svg.setAttribute('data-replaced', 'true') + if (checkedElements.has(svg)) return + checkedElements.add(svg) svg.innerHTML = twitterIconSvgInner if (applyStyle) svg.classList.add(applyStyle)