aboutsummaryrefslogtreecommitdiffstats
path: root/youtube/static/js
diff options
context:
space:
mode:
Diffstat (limited to 'youtube/static/js')
-rw-r--r--youtube/static/js/common.js33
1 files changed, 15 insertions, 18 deletions
diff --git a/youtube/static/js/common.js b/youtube/static/js/common.js
index bcd1539..ac4413b 100644
--- a/youtube/static/js/common.js
+++ b/youtube/static/js/common.js
@@ -121,11 +121,12 @@ window.addEventListener('DOMContentLoaded', function() {
* Priority: hq720.jpg -> sddefault.jpg -> hqdefault.jpg -> mqdefault.jpg -> default.jpg
*/
function thumbnail_fallback(img) {
- const src = img.src || img.dataset.src;
+ // Once src is set (image was loaded or attempted), always work with src
+ const src = img.src;
if (!src) return;
// Handle YouTube video thumbnails
- if (src.includes('/i.ytimg.com/')) {
+ if (src.includes('/i.ytimg.com/') || src.includes('/i.ytimg.com%2F')) {
// Extract video ID from URL
const match = src.match(/\/vi\/([^/]+)/);
if (!match) return;
@@ -138,36 +139,32 @@ function thumbnail_fallback(img) {
'hq720.jpg',
'sddefault.jpg',
'hqdefault.jpg',
- 'mqdefault.jpg',
- 'default.jpg'
];
// Find current quality and try next fallback
for (let i = 0; i < fallbacks.length; i++) {
if (src.includes(fallbacks[i])) {
- // Try next quality
if (i < fallbacks.length - 1) {
- const newSrc = imgPrefix + 'https://i.ytimg.com/vi/' + videoId + '/' + fallbacks[i + 1];
- if (img.dataset.src) {
- img.dataset.src = newSrc;
- } else {
- img.src = newSrc;
- }
+ img.src = imgPrefix + 'https://i.ytimg.com/vi/' + videoId + '/' + fallbacks[i + 1];
+ } else {
+ // Last fallback failed, stop retrying
+ img.onerror = null;
}
- break;
+ return;
}
}
+ // Unknown quality format, stop retrying
+ img.onerror = null;
}
// Handle YouTube channel avatars (ggpht.com)
else if (src.includes('ggpht.com') || src.includes('yt3.ggpht.com')) {
- // Try to increase avatar size (s88 -> s240)
const newSrc = src.replace(/=s\d+-c-k/, '=s240-c-k-c0x00ffffff-no-rj');
if (newSrc !== src) {
- if (img.dataset.src) {
- img.dataset.src = newSrc;
- } else {
- img.src = newSrc;
- }
+ img.src = newSrc;
+ } else {
+ img.onerror = null;
}
+ } else {
+ img.onerror = null;
}
}