generated at
status barに文字カウントを表示する(event版)

UserScript Eventsのサンプルですshokai

script.js
(() => { const statusDom = document.createElement('div') document.querySelector('.status-bar').appendChild(statusDom) updateStatusDom() updateCount() scrapbox.on('layout:changed', updateStatusDom) scrapbox.on('lines:changed', updateCount) function updateStatusDom () { if (scrapbox.Layout !== 'page') { document.querySelector('.status-bar').removeChild(statusDom) } else { document.querySelector('.status-bar').appendChild(statusDom) } } function updateCount () { if (!window.scrapbox.Page.lines) return const chars = scrapbox.Page.lines.map(line => line.text.length).reduce((a, b) => a + b) const words = scrapbox.Page.lines.map(line => line.text.split(/\s/).length).reduce((a, b) => a + b) const lines = scrapbox.Page.lines.length statusDom.innerText = `${lines}lines ${words}words ${chars}char` } })()

Status Bar文字カウントを表示するのを、イベントで書ける
これまではページのデータが更新されたことを検知するまともな手段がなかった
setIntervalで window.scrapbox.Page.lines をひたすら監視
MutationObserver等でDOMの変更を監視
どちらかしかなかった
ポイント
page list画面で文字カウントを表示しない
画面レイアウトの変更イベントで表示・非表示を切り替えている