Add SDB Audio Extractor extension with options and popup UI
- Implemented manifest.json for extension configuration - Created options.html and options.js for user settings management - Developed popup.html and popup.js for audio extraction functionality - Added icons for the extension (icon16.png, icon48.png) - Integrated API token and base URL configuration with validation - Implemented audio extraction from YouTube videos with error handling
This commit is contained in:
58
content.js
Normal file
58
content.js
Normal file
@@ -0,0 +1,58 @@
|
||||
// Content script for YouTube pages
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Function to get video information
|
||||
function getVideoInfo() {
|
||||
const titleElement = document.querySelector('h1.ytd-watch-metadata yt-formatted-string') ||
|
||||
document.querySelector('h1.ytd-video-primary-info-renderer .title') ||
|
||||
document.querySelector('#title h1') ||
|
||||
document.querySelector('h1');
|
||||
|
||||
const title = titleElement ? titleElement.textContent.trim() : document.title;
|
||||
const currentUrl = window.location.href;
|
||||
const cleanUrl = getCleanVideoUrl(currentUrl);
|
||||
|
||||
return {
|
||||
title: title,
|
||||
url: cleanUrl,
|
||||
videoId: getVideoId(currentUrl)
|
||||
};
|
||||
}
|
||||
|
||||
// Extract video ID from URL
|
||||
function getVideoId(url) {
|
||||
const match = url.match(/[?&]v=([^&]+)/);
|
||||
return match ? match[1] : null;
|
||||
}
|
||||
|
||||
// Clean YouTube URL to only include the video ID
|
||||
function getCleanVideoUrl(url) {
|
||||
const videoId = getVideoId(url);
|
||||
if (videoId) {
|
||||
return `https://www.youtube.com/watch?v=${videoId}`;
|
||||
}
|
||||
return url; // Return original if we can't extract video ID
|
||||
}
|
||||
|
||||
// Listen for messages from popup
|
||||
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
||||
if (request.action === 'getVideoInfo') {
|
||||
const videoInfo = getVideoInfo();
|
||||
sendResponse(videoInfo);
|
||||
}
|
||||
return true; // Keep message channel open for async response
|
||||
});
|
||||
|
||||
// Optional: Monitor for navigation changes on YouTube (SPA)
|
||||
let lastUrl = location.href;
|
||||
new MutationObserver(() => {
|
||||
const url = location.href;
|
||||
if (url !== lastUrl) {
|
||||
lastUrl = url;
|
||||
// URL changed, video info might have changed
|
||||
console.log('YouTube navigation detected');
|
||||
}
|
||||
}).observe(document, { subtree: true, childList: true });
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user