他のprojectに移動したらUserScriptの後始末をする(event版)
scriptの後始末はuserの責務である
セットしたタイマーの削除、汚したDOMの掃除など
scrapbox.on('project:changed', fn)
というイベントでproject移動を検知できる
setIntervalで日時を毎秒出力する
別projectに移動したらsetIntervalを止める
元のprojectに戻ってきたらsetIntervalを再開する
script.js(() => {
const currentProject = scrapbox.Project.name
scrapbox.on('project:changed', () => {
if (scrapbox.Project.name !== currentProject) cleanup()
else setup()
})
let timer
function setup () {
timer = setInterval(run, 1000)
}
function run () {
console.log('run timer', new Date())
}
function cleanup () {
console.log('cleanup timer')
clearInterval(timer)
}
scrapbox.on('project:changed', () => console.log('%cproject changed', 'color: red; font-size: 24px;'))
scrapbox.on('page:changed', () => console.log('%cpage changed', 'color: blue; font-size: 24px;'))
scrapbox.on('layout:changed', () => console.log('%clayout changed', 'font-size: 24px;'))
setup()
})()
processingの様に
setup()
や
cleanup()
という専用メソッドを用意して、そこにコードを書かせると良いのか?
既存のscriptとの互換性がなくなる
既にsetup()かcleanupという関数を使っているコードは多いだろう
今の仕組みだとglobal汚染になってしまう
scrapbox.Project.script({ setup: function, cleanup: function })
でどうか