userscriptで外部のjsを読み込
む方法
1. コピペしてコードブロックに貼り付ける
ESModuleで使えるようにした後、minifyしてscrapboxに貼り付ければ使える
事例
/programming-notes/scrapbox-parser.min.js
/programming-notes/date-fns.min.js
/programming-notes/idb
/programming-notes/preact@10.5.13
/takker/prettier@2.2.1
あまりにもファイルサイズが巨大でコピペできなかったので、import機能経由で取り込んだ
ESModuleとして使えるという利点がある
2. cdnjsから<script>経由でimportする
install-CDNが便利です
cf. /takker/scrapboxで外部APIを使う
元ネタ:/ci7lus/たのしいScrapboxUserScript
3. scrapboxのfile upload機能でuploadしたものをfetch& eval()/Function()import()する
ScrapExecのここをみて分かったmiyamonz.icon
/masui/ScrapExec#60588f9f8ee92a00002a78bc
scrapboxのファイルアップロード機能でjsファイルをアップロードして、テキストファイルとしてfetchしてevalすれば読み込める!!
p5とかprettierとか読み込みたいmiyamonz.icon*3
コードブロック記法でjs書いてるときってインデントとか整えられないので、勝手に整形してほしい
普通のES Modulesのファイルをimportできないのかと思ったが、無理だった
textとしてfetchしてevalするしかなさそうmiyamonz.icon
import '/files/xxxxx.js'は無理でしたか……takker.icon
出来ました。エラーは出ませんでした@/icons2/Firefox.icon
code:js
import('/api/code/villagepump/userscriptで外部のjsを読み込/sample3.js');
/miyamonz-playground/draggableなポップアップにp5埋め込むをお借りしました
code:sample3.js
import '/files/6066d758537216001c67a11b.js';
new p5(p => {
p.setup = () => p.createCanvas(400, 400);
p.draw = () => {
if (p.mouseIsPressed) {
p.fill(0);
} else {
p.fill(255,0,0);
}
p.ellipse(p.mouseX, p.mouseY, 80, 80);
};
}, 'editor');
miyamonz.iconはできない。何の条件が違うのかが分からない…miyamonz.icon
https://gyazo.com/2f1bb4f70e85c7284a28155b3f496e6d
どうやらFirefoxで実行した場合のみ成功するみたいですtakker.icon
なぜかCSP制限に引っかからない
なるほど
miyamonz.iconはchrome
何も考えずにこれを実行したら動いた
https://gyazo.com/7df16f0ecbfcf269a4b5b2f3dd596c50
4. WebAssemblyを使う
scrapboxのfile upload機能にuploadしたWASMファイルをWebAssembly.instantiateStreaming()で読み込む
5. yuki_minoh.iconのnode-bitmap-proxyを使う(未完成)
CSPを突破するnode-bitmap-proxyの原理を説明しました
6. ブラウザ拡張機能を使う
Disable Content-Security-Policy - Chrome ウェブストア
僕は試してないので自己責任でお願いしますyuki_minoh.icon