参加していないScrapbox projectでUserScriptを有効にする
TamperMonkeyを用いる
どうやらTamperMonkeyでESModuleを使えるらしいtakker.icon
Window: load eventが発生してから読み込む必要がある
これを使えば、外部projectを透過的に扱うscriptを他の人のprojectに適用できそうだ!
/icons/すごい.iconyosider.icon
code:js
// ==UserScript==
// @name template
// @namespace https://scrapbox.io
// @match https://scrapbox.io/programming-notes/*
// @version 0.1
// @description execute user scripts at external scrapbox projects
// @author anonymous
// @grant none
// ==/UserScript==
'use strict';
window.addEventListener('load', () => execute());
async function execute() {
// 読み込みたいUserScriptを指定する
const promises = [
import('/api/code/PROJECT/TITLE/CODE.js'),
//...
];
const objects = await Promise.all(promises);
}
例:/villagepump/未読のページにランダムジャンプするUserScript
@match (TamperMonkey)の書き方がわからんtakker.icon
code:sample1.js
// ==UserScript==
// @name 未読のページにランダムジャンプするUserScript
// @namespace https://scrapbox.io
// @match https://scrapbox.io/shokai/*
// @match https://scrapbox.io/inteltank/*
// @version 0.1
// @description 未読のページにランダムジャンプします
// @author takker
// @grant none
// ==/UserScript==
'use strict';
window.addEventListener('load', () =>
import('/api/code/programming-notes/参加していないScrapbox projectでUserScriptを有効にする/randomJump.js'));
code:randomJump.js
scrapbox.PageMenu.addMenu({
title: 'Jump to an unread page',
image: 'https://img.icons8.com/ios/180/shuffle.png',
onClick: () => {
const lines = document.getElementsByClassName('lines')?.0;
let count = 0;
const observer = new MutationObserver(() => {
console.log(${++count}: /${scrapbox.Project.name}/${scrapbox.Page.title});
const unreadTelomeres = lines.getElementsByClassName('telomere-border unread');
if (unreadTelomeres.length > 0) {
observer.disconnect();
return;
}
document.getElementsByClassName('random-jump-button')?.0.click();
});
observer.observe(lines, {childList: true});
document.getElementsByClassName('random-jump-button')?.0.click();
},
});