Chrome Extension(subtitle)
reference code
chrome extension
link click listen
1 | // Attach the click event listener to the entire document |
message from popup to contentScript
messageType.js
1 | export const DOWNLOAD_SUBTITLE = 'download chinese subtitle' |
popup.js
1 | import { LANGUGAES_INFO, UDAL_MODE } from '../utils/messageType' |
contentScript.js
1 | import { LANGUGAES_INFO, UDAL_MODE } from '../utils/messageType' |
message from contentScript to background
contentScript.js
1 | import { DOWNLOAD_SUBTITLE } from '../utils/messageType' |
background.js
1 | import { DOWNLOAD_SUBTITLE } from '../utils/messageType' |
background savefile
1 | saveFile(`${request.name}_${request.lenguage}.vtt`, request.subtitle) |
upload file to a video src
1 | function App() { |
content put src
1 | setDualSubtitle(content) |
add inject
manifest.json
1 | { |
contentScript.tsx
1 | // add injected |
injected.js
1 | window.addEventListener('load', function () { |
send message to inject
contentScript.tsx
1 | window.postMessage( |
injected.js
1 | window.addEventListener('message', (e) => { |
background run script
manifest.json
1 | { |
contentScript.tsx
1 | chrome.runtime.sendMessage({ |
background.ts
1 | chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { |
background wait message and fetch url(this case limite by CORS)
contentScript.tsx
1 | let iframeElement = document.getElementById( |
background.ts
1 | chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { |
window.parent.postMessage(this case limited by CORS)
manifest.json
1 | { |
contentScript.tsx
1 | let iframeElement = document.getElementById( |
script.js
1 | window.parent.postMessage({ type: 'getIframeContent' }, '*') |
video player
1 | function NewVideo() { |
background oninstalled
1 | chrome.runtime.onInstalled.addListener((details) => { |
page change
1 | // background |
1 | // content script |
inject.js send message to contentScript.js
1 | // injected.js |
1 | // contentScript.tsx |
js
add one div before one
1 | function addNewVideo() { |
get/set and check attribute
1 | let nameElement = document.querySelector('link[hreflang="x-default"]') |
get attribute as object
1 | let languageElements = document.querySelectorAll('video track') |
class control
1 | // remove class |
style control
1 | // check style exist #1 |
check button disable
1 | const myButton = document.getElementById('myButton') as HTMLButtonElement |
check iframe content
1 | let iframe = document.querySelector( |
interval and timeout
1 | let ACTIVE_COUNT_MAX = 10 |
kep press
1 | // set Esc event |
full screen
1 | <div id="video-show"> |
1 | // enter full screen(div-#video-show) |
button click
1 | function buttonClick() { |
video click
1 | const myVideo = document.getElementById('my-video') |
simulate click
1 | function triggeeClick() { |
string replace
1 | // % replace by percent |
video current time
1 | let INTERVAL_STEP = 1000 |
check element changed
1 | const textElement = document.querySelector( |
check element clild changed
1 | const containerElement = document.querySelector( |
TypeScript
disable
1 | const handleToggleSubtitles = () => { |
API
Translate
1 | let xhr = new XMLHttpRequest() |
Ref
- reference source
- SubtitlesForYoutube : Youtube Drop .SRT for subtitle
- Movie Subtitles : Video/Movie streaming platform Load .srt for subtitle
- Super-Subtitles : YouTube subtitle transfer word for English
- YouTube subtitles viewer - React Chrome Extension : view Youtube subtitle
- youtube-captions : Youtube double subtitle
- antd-chrome-extension-boilerplate : react + antd for chrome-extension development
- XHook
- Ajax-hook 原理解析
- JS XHR HOOK js 实现 ajax
- ajax-hook
- 用Chrome 擴充實現修改ajax 請求的回應
- Hook Ajax
- Ted subtitle merge
- js-reference