いなにわうどん

うどんの話に見せかけて技術的な話をしたい(できない)

Chrome 拡張機能で Twitter に桜を降らせる

友人にお花見しようぜ!と声をかけてみたのですが、コロナが怖いから……とやんわり断られてしまいました。
皮肉にもLINEの背景には桜吹雪が舞い散ってやがります。悔しいのでTwitterに桜を振らせて気を紛らわせましょう。

拡張機能作るよ!!

Chrome拡張機能からDOMをゴニョゴニョすることで実装します。

manifest.json

適当なフォルダを作成し、manifest.json を定義します。こんな感じの拡張機能だよーと指針を示すファイルです。
とりあえずは下記の必須項目のみを指定しておけば大丈夫です。
content_scripts を指定すると、指定のページ(下記の場合は https://twitter.com/ 下)でJavaScriptCSS等を作動させることが可能となります。
動画素材は web_accessible_resources で指定した位置(images/)に動画素材を配置します。

{
	"manifest_version": 2,
	"name": "Cherry Blossoms for Twitter",
	"version": "0.0.0",
	"content_scripts": [
		{
			"matches": ["https://twitter.com/*"],
			"css": ["scripts.css"],
			"js": ["scripts.js"]
		}
	],
	"web_accessible_resources": ["images/*"]
}

JavaScript

次いで同フォルダ下に scripts.js を作成します。DOMを適当に操作してdocument.body 下に背景動画を含んだ <div> を配置します。

let box = document.createElement("div");
box.id = "cherry-bg"

let cover = document.createElement("div");
cover.className = "cover";

let movie = document.createElement("video");
movie.src = chrome.extension.getURL("images/fe04.mp4");
movie.muted = "muted";
movie.autoplay = "autoplay";
movie.loop = "loop";

box.appendChild(cover);
box.appendChild(movie);
document.body.appendChild(box);

桜吹雪の動画素材に関してはmasa YASU様の動画より拝借いたしました。

youtu.be

CSS

scripts.cssを作成します。
黒を貴重とした動画素材を採用したため、Twitterダークモードと相性が良さそうです。
#cherry-bg を position:fixed で固定した後、元から存在する #react-root の z-index を上げ、背景色を削除することで透過処理を実現しています。
また、動画に被せる形で rgba(0, 0, 0, 0.2) のdivを指定しています。

#cherry-bg {
	width:100%;
	position:fixed;
	top:0;
	left:0;
}

#cherry-bg .cover {
	width:100%;
	height:100vh;
	background:rgba(0,0,0,0.2);
	position:absolute;
	top:0;
	z-index:1;
}


#cherry-bg video {
	width:100%;
	position:absolute;
	top:0;
	z-index:0;
}

#react-root {
	text-shadow:0 0 4px #000;
	position:relative;
	z-index:2;
}
.r-1ila09b, .r-18bvks7 {
	border-color:rgba(255,255,255,0.2) !important;
}
.r-yfoy6g, .r-aaos50, .r-1uaug3w {
	background:transparent !important;
}
.r-xnswec {
	background:rgba(0,0,0,0.6) !important;
	box-shadow:0 0 10px rgba(0,0,0,0.6) !important;
}
.r-11u3ssh {
	background:rgba(0,0,0,0.6) !important;
}

あとは、chrome://extensions/ から デベロッパーモード:オン →[パッケージ化されていない拡張機能を読み込む]よりフォルダを選択し、

Twitterを開くと――

殺伐としたTLも桜吹雪で和みそうですね!!これであと100日くらいは家に引き籠もっていられそうです。
どうか、良い春分をお過ごしください。