diff --git a/extension/script.js b/extension/script.js index 7b78717..496a152 100644 --- a/extension/script.js +++ b/extension/script.js @@ -106,11 +106,11 @@ function getBrowser() { } function getChannelContainers() { - const elements = document.querySelectorAll('#inner-header-container, #owner'); + const elements = document.querySelectorAll('.page-header-view-model-wiz__page-header-flexible-actions, #owner'); const channelContainerNodes = []; elements.forEach(element => { - if (isElementVisible(element)) { + if (isElementVisible(element) && window.location.pathname !== '/playlist') { channelContainerNodes.push(element); } }); @@ -194,20 +194,40 @@ function buildChannelButton(channelContainer) { } function getChannelHandle(channelContainer) { - let channelHandle; - const videoOwnerRenderer = channelContainer.querySelector('.ytd-video-owner-renderer'); - if (!videoOwnerRenderer) { - const channelHandleContainer = document.querySelector('#channel-handle'); - channelHandle = channelHandleContainer ? channelHandleContainer.innerText : null; - } else { - const href = videoOwnerRenderer.href; - if (href) { - const urlObj = new URL(href); - channelHandle = urlObj.pathname.split('/')[1]; + function findeHandleString(container) { + let result = null; + + function recursiveTraversal(element) { + for (let child of element.children) { + + if (child.tagName === "A" && child.hasAttribute("href")) { + const href = child.getAttribute("href"); + const match = href.match(/\/@[^/]+/); // Match the path starting with "@" + if (match) { + // handle is in channel link + result = match[0].substring(1); + return; + } + } + + if (child.children.length === 0 && child.textContent.trim().startsWith("@")) { + // handle is in channel description text + result = child.textContent.trim(); + return; + } + + recursiveTraversal(child); + if (result) return; + } } + + recursiveTraversal(container); + return result; } + let channelHandle = findeHandleString(channelContainer.parentElement); + return channelHandle; }