generated at
他のprojectに移動したらUserScriptの後始末をする(event版)

UserScript Eventsを使ってUserScriptの後始末をするサンプルですshokai
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 }) でどうかshokai