たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 4539
どうもこんばんわ。
恋にはあまえが必要です ~もっとあまえるだけミニファンディスク、恋にはあまえが必要です ~もっとあまえてもらうだけミニファンディスク 攻略しました。
みじかい!!!もっと見たかった
一番最後が HOOK って感じがしてとてもよかった!!!
おさげだ!!
イベントCGが気になって結局両方買ってしまった。。。
世の中にはブックマークレット
と呼ばれてるものがあります。
これは何かというと、ブラウザのブックマークの仲間で、普通はブックマークといえばURL
を保存するものですが、任意のJavaScript
コードを保存することが出来ます。
ブックマークを押したらURL
が開きますが、ブックマークレットは押したら中にあるJavaScript
のコードが実行できます。
ブラウザ拡張機能のしょぼい版。しかし!スマホのブラウザ(Android Chrome
)では拡張機能動かない一方で、ブックマークレットは動くので何かと便利かも。
ぱっと思いついたのでも
requestFullscreen
呼ぶだけ)とか<video>
のloop
をtrue
にするだけ)QRコード
を表示するブックマークレットとかあるので、色々面白いことがスマホのブラウザでもできそう。そうスマホのブラウザでもね!
例えばコレが全画面表示にするブックマークレット。
javascript:
から始まってて、かつスコープを汚さないよう即時関数の中に入ってますね。
javascript:(function(){ document.documentElement.requestFullscreen() })();
てなわけで、この中に好きなJavaScript
を書けば良さそうですね。
javascript:(function(){ /* ここに好きなのを書けばいい */ })();
さて本題。
本当に全画面表示にするだけなら1行ですが、
今日のJavaScript
でのWeb
開発ではnpm
からライブラリを入れるだの、TypeScript
で書くのが当たり前で、JavaScript
をつらつらと書いていくのは時代に合わないって?
なんならnpm
でライブラリを入れてTypeScript
でブックマークレットが書きたいだって?
というわけで今回は、esbuild
でブックマークレットを作る話です。
これでnpm i
できるし、TypeScript
で書けます。最終的にはJavaScript
になって、ブックマークレットとして登録できるようにしてみます。
バンドラー。
らしいけどよくわからない、今回はnpm i
したライブラリを一つのJavaScript
にまとめて、かつTypeScript
で書けるようにしたいだけ。
どうやらesbuild
、何もしてなくても一つのJavaScript
として吐き出すので(よくわからない)、一つになるならブックマークレットにもってこいじゃんってなった。
https://esbuild.github.io/getting-started/#your-first-bundle
今回はQRコード
を表示するブックマークレットでも作ってみますか。
npm
からライブラリを入れてQRコード
を作ることにします。
Node.js
入っててesbuild
動けば何でもいいんじゃない?
key | value |
---|---|
Windows | 10 Pro |
テキストエディタ | VSCode |
Node.js | v20.9.0 |
適当にフォルダを作り、ターミナルを開いて、npm init
します。
以下を叩く
npm install --save-exact --save-dev esbuild
main.ts
ファイルを置きます。
中身はとりあえず、全画面表示にするコードでも。TypeScript
要素なし!
document.documentElement.requestFullscreen()
前述の通り、以下のようにjavascript:
を付けたりしないとブックマークレットとして登録できないので、そうなるように調整します。
javascript:(function(){ /* esbuild さん、ここにコード出して! */ })();
package.json
を開き、build
コマンドを追加します。以下のように。。
scripts
の中ですね
{
"name": "qrcode-esbuild-bookmarklet",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "esbuild main.ts --bundle --minify --outfile=bookmarklet.js --banner:js=javascript: --format=iife"
},
esbuild main.ts
main.ts
をJavaScript
にしてねって--bundle
node_modules
の中身)も、これから吐き出すJavaScript
に混ぜてねってJavaScript
にする必要があり、**node_modules がブラックホールで~**とか言ってる場合ではない
--minify
--outfile=bookmarklet.js
TypeScript
のファイルにまたがってようと一つになるはず--banner:js=javascript:
JavaScript
の先頭に好きな文字を埋め込めるオプションですjavascript:
を付与するようにしています--format=iife
JavaScript
が出てくるようになります
(()=>{ /*こ↑こ↓*/ })();
いや、、、なんかね、もっと苦戦するもんだと思ってたんだけど、オプション何個か指定するだけで終わったわ。すごすぎるesbuild
以下のコマンドを叩いてみます
npm run build
出来ました、とっても速いですね。
Chrome
ならブックマークとリスト > ブックマーク マネージャ
、Firefox
ならブックマーク > ブックマークを管理
で開く画面で新しいブックマークが登録できるはず。
アドレス欄の☆を押して登録するから新規登録どこだか分かんなかった。
名前は適当に、URL
の欄にはさっき出てきたbookmarklet.js
の中身を貼り付けます。改行があると思いますが気にせずコピーして貼り付けてオッケーなはず。
押します・・!
おお~
ちなみに同期されれば他のスマホからでも使えるんじゃないでしょうか!?
今回はこちらのライブラリを借りて、QRコード
を作ってみます。ありざいす
https://www.npmjs.com/package/qrcode
npm install --save qrcode
npm i --save-dev @types/qrcode
ライブラリのおかげでほとんど何もしてないですね、、
import QRCode from "qrcode"
// QRコードを描画する Canvas を用意
const qrCodeCanvas = document.createElement('canvas')
// 真ん中に出す
// https://stackoverflow.com/questions/2005954/
qrCodeCanvas.style.position = 'fixed'
qrCodeCanvas.style.top = '50%'
qrCodeCanvas.style.left = '50%'
qrCodeCanvas.style.transform = 'translate(-50%, -50%)'
// z-index は一番上に出てきてほしいので、あんまり良くないかもだけど
qrCodeCanvas.style.zIndex = 'calc(infinity)'
// 追加する
document.body.appendChild(qrCodeCanvas)
// クリックで消したい
qrCodeCanvas.onclick = () => {
document.body.removeChild(qrCodeCanvas)
}
// QRコードを生成する
QRCode.toCanvas(qrCodeCanvas, location.href, (error) => {
if (error) {
alert('QRコードの生成に失敗しました')
}
})
これをnpm run build
して、bookmarklet.js
をブックマークレットとして登録すれば・・・
動きました!やった~
ちゃんとライブラリもbookmarklet.js
の中に同梱されてそうですね。(動いているのを見る限り)
これで今日のフロントエンド開発の経験をブックマークレット開発でも活かせるようになりました。
めでたしめでたし
煮るなり焼くなり
https://github.com/takusan23/qrcode-esbuild-bookmarklet
ブックマーク一覧から選ぼうとすると失敗します。
アドレス欄からブックマークレットの名前を入力して、出てきたブックマークレットを選ぶことで起動できます。
もっと苦戦するはずだったんだけどesbuild
とライブラリが全部やってくれました。