2024/04/12に劇場版名探偵コナンが公開されました。
今年は絶対に何が何でもネタバレを踏みたくなかったので、ネタバレを含みそうなページの表示をブロックするChrome拡張をつくりました。
Chrome拡張の実装
bodyの中身をMutationObserver
で監視して、ネタバレになりそうなワードを含む場合にページの中身を書き換えることにしました。
大したことはしないのでcontent scriptだけでどうにかします。
const keywords = [
"名探偵",
"コナン",
"100万",
"五稜",
"みちしるべ",
"怪盗",
"まじっく",
"以下思いつく限りネタバレに繋がりそうなワードを羅列する",
"キーワードはこの他に20くらい設定しました",
];
const target = document.body;
const observer = new MutationObserver(() => {
const text = document.body.textContent;
if (keywords.find((keyword) => text.search(keyword) > 0)) {
document.body.innerHTML = "映画のネタバレを含みそうなページです。";
}
});
observer.observe(target, {
childList: true,
attributes: true,
characterData: true,
subtree: true,
});
manifest.jsonは適当です。
{
"icons": {
"16": "icons/16.png",
"48": "icons/48.png",
"128": "icons/128.png"
},
"name": "コナンのネタバレを消し飛ばす拡張",
"description": "ネタバレを絶対に見たくない",
"version": "0.1",
"manifest_version": 3,
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["script.js"],
"all_frames": true,
"run_at": "document_end"
}
]
}
実行結果
適当に旧Twitter(今はX)を開いてみます。
無事にネタバレの可能性を回避できました。
感想
公開から1週間経った後に見に行ったのですが、無事ネタバレを一切踏むことなく映画を鑑賞できました。本当に何も知らない状態で見たかったので、目的が達成できて良かったです。
最初はalertを表示してOKを押下すればページを表示するように考えていたのですが、モーダルウィンドウで背景を黒一色に設定しないと中身が目に入ってしまう可能性があったので、いっそのこと全部表示しない実装にしてしまいました。結果的にこのくらい厳しくして良かったと思います。bodyを監視するのと、searchでキーワードを総なめするのでかなり重くなると思ったのですが、実際動かしてみるとそこまで気になりませんでした。
反省点
映画を見たあとに設定したキーワードを見返したのですが、全然足りなかったと思いました。場合によってはネタバレを踏んでたかもしれなくて結構危なかったです。
あと、拡張の実装とは全然関係ないのですが、映画館で着席した時に前に座ってた2周目っぽい人たちがはちゃめちゃに盛り上がってて肝が冷えました。コナン映画を周回する人の民度には期待できないので、開演5分後の予告とか宣伝とかやってる時間に入るか、直前までイヤホンで音楽聞いてたほうが良かったですね。でもあの内容だったら盛り上がっても仕方ないと思いました。