YouTubeでスペースキーが動かない時のユーザースクリプト対処

## はじめに

この記事は、YouTubeでスペースキーによる動画の一時停止/再開ができなくなって困った人のためにAutoHotkeyのスクリプトによる代替策を紹介するものです。

## 本記事の対象者

- YouTubeでスペースキーが効かなくなった方。
- どうしてもスペースキーで動画の一時停止/再開をしたい方。

## 経緯

2023年11月1日頃までに、YouTubeでスペースキーによる動画の一時停止/再開ができなくなりました。

そこでTampermonkeyのユーザースクリプトを作って、スペースキーを押したらビデオをクリックするようにしました。

ところがそのTampermonkeyのユーザースクリプトが動かなくなったので、2024年02月10日にAutoHotkey(v1)のスクリプトを作りました。

その後AutoHotkey(v2)が今後の標準になることが分かったので、2024年03月30日にAutoHotkey(v2)のスクリプトに作り替えました。

## AutoHotkey(v2)のスクリプト

次はWindowsのフリーソフトであるAutoHotkey(v2)のスクリプトです。

Google ChromeとFirefoxに対応します。また全画面に対応します。

```nasm
;タイトルの一部に「YouTube」を含み、実行ファイルがchrome.exeの場合。
;chrome.exeやfirefox.exeでないなら修正が必要です。AutoHotkeyのWindow Spyを動かしてahk_exeの値を確認してください。
#HotIf WinActive("YouTube ahk_exe chrome.exe")
Space:: {
	b_WS_CAPTION := WinGetStyle() & 0xC00000
	if not b_WS_CAPTION {
		/**
		 * 全画面（タイトルバーがない）の場合、全画面を終了しないようにエスケープキーを送信しません。
		 */
		Send "k"
		return
	}

	;スペースキーが押されたらKキーを押します。
	;Altキーが入ったときのためだけではなく、テキストボックスにフォーカスがあり検索候補のポップアップが出た状態でアドレスバーにフォーカスがあるときにも対応します。
	Send "{Esc}"
	Sleep 100
	Send "{Esc}"
	Sleep 100
	Send "{Esc}"
	Sleep 100
	Send "k"
}

;タイトルの一部に「YouTube」を含み、実行ファイルがfirefox.exeの場合。
#HotIf WinActive("YouTube ahk_exe firefox.exe")
Space:: {
	b_WS_CAPTION := WinGetStyle() & 0xC00000
	if not b_WS_CAPTION {
		Send "k"
		return
	}

	;Firefoxではエスケープキーでアドレスバーからフォーカスを外せないので工夫します。
	;Ctrl+Kを押したときにアドレスバーの下に現れる「今回だけ使う検索エンジン」を非表示にするには、about:preferences#search の検索ショートカットで代替検索エンジンをすべてオフにしてください。
	Send "^k"
	Sleep 100
	Send "{F6}"
	Sleep 100
	Send "k"
}
#HotIf
```

## AutoHotkey(v1)のスクリプト

```nasm
;タイトルのマッチ方法を中間一致にする。
SetTitleMatchMode,2

;タイトルの一部に「YouTube」を含み、実行ファイルがchrome.exeの場合。chromeでないならスクリプト要修正。
#IfWinActive,YouTube ahk_exe chrome.exe
Space::
;スペースキーが押されたらKキーを押す。
	Send, {K}
	Return
;以降の条件を無しに設定。
#IfWinActive
```

## Tampermonkeyのユーザースクリプト

ブラウザの拡張機能Tampermonkeyを入れて次のユーザースクリプトを追加してください。

現在このスクリプトは動きません。

```javascript
// ==UserScript==
// @name         Youtube Fix Space Key
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  YouTubeでスペースキーが効かないのでスペースキーが押されたら動画をクリックする。
// @author       Query Kuma
// @match        https://www.youtube.com/*
// @grant        none
// ==/UserScript==

(function () {
	'use strict';

	console.log("Youtube Fix Space Key");

	let E_window_keydown = (e) => {
		if (e.code !== 'Space') {
			return;
		}

		e.stopImmediatePropagation();
		e.stopPropagation();
		e.preventDefault();

		let e_video = document.querySelector('video');
		e_video.click();
		console.log('Spaceキーが押されたのでvideoをクリックしました。');
	};

	window.removeEventListener('keydown', E_window_keydown, true);
	window.addEventListener('keydown', E_window_keydown, true);

	/**
	 * keydownイベントにuseCapture(true)をつけるだけでは足りなかったのでkeyupイベントを無効化する。
	 */
	let E_window_keyup = (e) => {
		if (e.code !== 'Space') {
			return;
		}

		e.stopImmediatePropagation();
		e.stopPropagation();
		e.preventDefault();

		console.log('keyupイベントのSpaceキーを無効化しました。');
	};
	window.removeEventListener('keyup', E_window_keyup, true);
	window.addEventListener('keyup', E_window_keyup, true);
}());
```

## さいごに

YouTubeでTampermonkeyのスクリプトが動かなくなったとき、スペースキーをやめてKキーを使おうと思いました。

しかしどうしてもスペースキーで動画の一時停止/再開をしたかったので、AutoHotkeyのスクリプトをつくりました。

Alt+Tabによるウィンドウ切り替えからのスペースキーによる動画の一時停止/再開を左手だけでできます。

どうしてもスペースキーで動画の一時停止/再開をしたい方の役に立てば幸いです。