저번에 예고한 대로 shortcut 추가 개발 진행
기능 정의
👉 사용자가 5초를 입력하면 5초단위로 넘기기 기능이 동작
👉 사용자가 1.25배속을 입력하면 쇼츠가 1.25배속으로 재생
👉 터무니 없는 값(100초, -10배속)을 입력하지 못하도록 select 사용
사용자가 직접 값을 선택할 수 있도록 팝업 구성

<html lang="ko-KR">
<head>
<!--한글 깨짐 해결-->
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<section style="width: 250px">
<h2>shortcut</h2>
<fieldset>
<legend>배속</legend>
<select id="speed">
<option value="1">1</option>
<option value="1.25">1.25</option>
<option value="1.5">1.5</option>
<option value="2">2</option>
</select>
</fieldset>
<fieldset>
<legend>넘기기(초)</legend>
<select id="skip">
<option value="5">5</option>
<option value="7">7</option>
<option value="10">10</option>
</select>
</fieldset>
<div role="group">
방향키
<span>◀️</span>
<span>▶️</span>
</div>
</section>
<script type="module" src="popup.js"></script>
</body>
</html>
chrome.runtime.sendMessage() 함수를 사용했다popup.js: 보내는 쪽
const skipSelect = document.querySelector('#skip');
skipSelect.addEventListener('change',(e)=>{
chrome.runtime.sendMessage({skip:e.target.value})
})
script.js: 받는 쪽
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
const skipRate = message.skip;
});
chrome.runtime.onMessage.addListener함수는 background에서 항상 동작하는 코드에서만 사용할 수 있음{
// manifest.json
...
"permissions": ["storage"],
...
}
storage에 값 저장
skipSelect.addEventListener("change", (e) => {
const value = e.target.value;
//skip이라는 key값 사용해서 저장
chrome.storage.local.set({ skip: value.toString() });
});
storage에서 값 불러오기
// 저장할 때 key값을 사용
chrome.storage.local.get(["skip"]).then((result) => {
skipRate = +result.skip;
});
storage의 값이 변경될 때마다 값 불러오기
chrome.storage.onChanged.addListener((changes, namespace) => {
// 저장할 때 key값을 사용
if (changes.skip) {
skipRate = +changes.skip.newValue;
}
});
개발자 도구에서 확인

playbackRate속성을 이용해 배속 변경function changeSpeed(value) {
video.playbackRate = +value;
}
// 사용자가 값을 변경하면 스토리지에 저장된 값이 변경되며 이벤트 발생
chrome.storage.onChanged.addListener((changes, namespace) => {
if (changes.speed) {
changeSpeed(changes.speed.newValue);
}
});
크롬 익스텐션 기능의 아주 일부만 사용해서 더 많은 기능을 사용해 보고 싶은 마음이 생겼다ㅎㅎ