SPA の再レンダリングは innerHTML の作り直しで要素を新品に差し替えるため、外部が付けた aria-label は破棄される。
si.js(ブラウザ側)は MutationObserver で DOM の変化を検知し、未補正の要素にだけ属性を再適用することでベストエフォートに補正を残す。
無限スクロールに対しては IntersectionObserver で可視要素にゲートし、オフスクリーンを処理しないことで CPU を抑える。
本ページは observer なし(消える)、observer 再適用(残る)、可視ゲート補正 を並置して実測する。
1 回だけ setAttribute('aria-label', …) を付与。数量変更 → innerHTML 再生成で要素が新しくなり消える。
MutationObserver(childList/subtree) + 80ms debounce。入口で isAlreadyFixed 早期 return。attributes は観測しない設計。
スクロールで alt なし img を append。sentinel を IO で監視し追加ロード。各 img は可視になった時だけ alt 補完(requestIdleCallback で分割)。
実行中…