---
# System prepended metadata

title: Youtube Music 怎麼沒有快捷鍵！太痛苦了
tags: [Shell, Raycast, Bash]

---

# Youtube Music 怎麼沒有快捷鍵！太痛苦了

# 情境
> 最近開始使用 YouTube Music 來聽音樂，發現說 YouTube Music 在MacOS系統上面沒有APP可以使用！
> 因此我就透過 PWA 來安裝 YouTube Music 作為 APP (歌單太赤裸我馬賽克了，搞得畫面怪怪的笑死)
> ![image](https://hackmd.io/_uploads/S1EcSzN5xl.png)
> 再來是我平常會把這個 YouTube Music PWA 放在背景播音樂聽，但是我可能同時在使用 Arc 或者 Google Chrome 分頁視窗，可能會有分頁是 使用 YouTube 來看影片，這時兩個聲音同時播放就會打架，我不希望兩個聲音同時播放，因此希望有工具可以幫助我快速暫停播放我 YouTube Music PWA 播放的音樂，同時這不能影響我前景播放的分頁影片


# 嘗試解方
> 再來會提及一些我可能想到的解決方法
- 鍵盤上方的 F8 按鈕不是很好用嗎？？？
    - 只能控制目前的 Now Playing session。
    - 前景有一般 YouTube 影片時，它會搶走控制權 → 你背景的 YouTube Music PWA 就被忽略。
    - 簡單來說，可能會控制錯東西啦，不能指定只控制 Youtube Music PWA
- nowplaying-cli
    - 有一個東西叫做 nowplaying-cli，大家如果有去 brew install 看看的話會發現，get-raw 只回報當前那個 session，不會列出全部來源讓你選 YT Music PWA；也無法點名「請控制 YouTube Music PWA」。
![image](https://hackmd.io/_uploads/SkD3dfNcle.png)

- AppleScript（模擬按鍵 / 切前景）
    - 我想說蘋果有內建的 shortcut 可以使用，因此腦筋動到 run AppleScript上面
    - 但是單純 keystroke space 常打不到播放器（只聽到「咚」）。
    - 某些能用的寫法需要把 YT Music PWA切到前景一下下，體驗不友善。
- Raycast YouTube Music Extension
    - 因為我是 Raycast 重度使用者，我當然要找找上面的 Extension是否有
    - 有找到，在這邊 ---> [Link](https://www.raycast.com/danieldbird/youtube-music)，但是可能很久沒維護了，我下載測試後發現不能用


# 最終可行解法

## 前置作業
- 安裝必要依賴
    - `brew install chrome-cli jq`
- 打開你的 chrome 設定允許 JavaScript，接著重啟瀏覽器
    - View → Developer → Allow JavaScript from Apple Events
    ![image](https://hackmd.io/_uploads/HJkT2Wt6xx.png)



## 創建 Raycast 的 Script Command
- 來到 Raycast Settings 頁面新增一個 Script Command
![image](https://hackmd.io/_uploads/r1ntnfN9ll.png)
- 取一個喜歡的名字，我是叫做 YouTube Music Play/Pause，之後按下 CMD+ENTER 來創建（Mode 可以設定成 Silent，但其實之後程式碼會改，所以不影響）
![56996](https://hackmd.io/_uploads/SJEp6fVqgg.png)
- 接著會請你選擇一個資料夾來創建，就依照個人習慣了

## 編輯剛剛創建的 Raycast 的 Script Command
- 如果你剛剛取名叫做 YouTube Music Play/Pause，那你會得到一個 `youtube-music-play:pause.sh`，我們要編輯這個檔案
- 這邊附上我的程式碼：
```bash=
#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Youtube Music Play/Pause
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🕹️

# Documentation:
# @raycast.author harryup2000
# @raycast.authorURL https://raycast.com/harryup2000

# Which browser PWA? (chrome-cli, brave-cli, edge-cli, arc-cli, etc.)
BIN="${BIN:-chrome-cli}"

# JavaScript snippet to toggle play/pause
JS_TOGGLE='(()=>{const c=s=>{const e=document.querySelector(s);if(e){e.click();return true}return false};
if(c("#play-pause-button"))return;
if(c("ytmusic-player-bar button.play-pause-button"))return;
const m=document.querySelector("video,audio");if(m){m.paused?m.play():m.pause();return}
const alt=[...document.querySelectorAll("button[aria-label]")].find(b=>/play|pause/i.test(b.getAttribute("aria-label")||""));
if(alt)alt.click();})();'

# Find YouTube Music tab id
TAB_ID=$(OUTPUT_FORMAT=json "$BIN" list tabs \
  | jq -r '.tabs[] | select((.url//"")|test("music\\.youtube\\.com")) | .id' | head -n1)

if [[ -z "$TAB_ID" ]]; then
  # Try to open if not found
  "$BIN" open "https://music.youtube.com"
  sleep 1.5
  TAB_ID=$(OUTPUT_FORMAT=json "$BIN" list tabs \
    | jq -r '.tabs[] | select((.url//"")|test("music\\.youtube\\.com")) | .id' | head -n1)
fi

if [[ -n "$TAB_ID" ]]; then
  "$BIN" execute "$JS_TOGGLE" -t "$TAB_ID"
  echo "▶️  Toggled YouTube Music"
else
  echo "❌ Could not find YouTube Music"
fi
```
## 設訂專屬的 shortcut
- 接下來只要在 Raycast 設定專屬的 shortcut 就完成啦
![43131](https://hackmd.io/_uploads/H1xnkmVcee.png)

## (Optional) 其他快捷鍵
- 你可以設定其他快捷鍵喔，像是上一首以及下一首，這邊附上我的 Github Repo：
{%preview https://github.com/chungchihhan/youtube-music-controller %}


# 體驗大升級
- 如果你正在看 YouTube 影片（瀏覽器分頁在最前面）
- 按下你設定的快捷鍵（例：⌥⌘P）
- 背景 YT Music PWA 立即暫停（畫面不切換、前景影片不受影響）
- 再按一次同一快捷鍵 → 背景音樂繼續播放

# 最後提醒（常見坑）
- **允許 Apple Events 執行 JavaScript一定要開，且重啟瀏覽器；否則 execute 沒反應。**
- 用 Brave/Edge 安裝的 PWA，請用 BIN=brave-cli / BIN=edge-cli。
- 請確保創建的 Raycast 的 Script Command 可以執行(`chmod +x`)
