Loading issue fix

This commit is contained in:
goodtube4u
2025-06-13 12:19:47 +10:00
parent e69a233f83
commit 0bb7cabd3e
3 changed files with 155 additions and 116 deletions

View File

@@ -1,7 +1,7 @@
// ==UserScript==
// @name GoodTube
// @namespace http://tampermonkey.net/
// @version 2.005
// @version 2.009
// @description Removes 100% of Youtube ads.
// @author GoodTube
// @updateURL https://github.com/goodtube4u/goodtube/raw/refs/heads/main/goodtube.user.js
@@ -421,7 +421,7 @@
/* Desktop */
#goodTube_playerWrapper {
border-radius: 12px;
background: #ffffff;
background: #000000;
position: absolute;
top: 0;
left: 0;
@@ -481,11 +481,6 @@
goodTube_playerWrapper = document.querySelector('#goodTube_playerWrapper');
goodTube_player = goodTube_playerWrapper.querySelector('iframe');
// Expose when the proxy iframe has loaded
goodTube_player.addEventListener('load', function () {
goodTube_proxyIframeLoaded = true;
});
// Setup player dynamic positioning and sizing
goodTube_player_positionAndSize();
@@ -1195,10 +1190,10 @@
/* Load GoodTube
-------------------------------------------------- */
// Init our player (after DOM is loaded)
document.addEventListener("DOMContentLoaded", goodTube_player_init);
document.addEventListener('DOMContentLoaded', goodTube_player_init);
// Also check if the DOM is already loaded, as if it is, the above event listener will not trigger.
if (document.readyState === "interactive" || document.readyState === "complete") {
// Also check if the DOM is already loaded, as if it is, the above event listener will not trigger
if (document.readyState === 'interactive' || document.readyState === 'complete') {
goodTube_player_init();
}
@@ -1214,7 +1209,12 @@
window.addEventListener('message', goodTube_receiveMessage);
// Init the menu
document.addEventListener("DOMContentLoaded", goodTube_menu);
document.addEventListener('DOMContentLoaded', goodTube_menu);
// Also check if the DOM is already loaded, as if it is, the above event listener will not trigger
if (document.readyState === 'interactive' || document.readyState === 'complete') {
goodTube_menu();
}
}
// Listen for messages from the iframe
@@ -1224,8 +1224,13 @@
return;
}
// Goodtube player has loaded
else if (event.data === 'goodTube_loaded') {
// Proxy iframe has loaded
else if (event.data === 'goodTube_proxyIframe_loaded') {
goodTube_proxyIframeLoaded = true;
}
// Player iframe has loaded
else if (event.data === 'goodTube_playerIframe_loaded') {
goodTube_player.style.display = 'block';
}
@@ -1911,6 +1916,16 @@
// Listen for messages from the parent window
window.addEventListener('message', goodTube_iframe_receiveMessage);
// Let the parent frame know it's loaded
document.addEventListener('DOMContentLoaded', () => {
window.top.postMessage('goodTube_playerIframe_loaded', '*');
});
// Also check if the DOM is already loaded, as if it is, the above event listener will not trigger
if (document.readyState === 'interactive' || document.readyState === 'complete') {
window.top.postMessage('goodTube_playerIframe_loaded', '*');
}
}
// Actions
@@ -2483,54 +2498,64 @@
------------------------------------------------------------------------------------------ */
// Init
function goodTube_proxyIframe_init() {
// Wait for the DOM to load
document.addEventListener("DOMContentLoaded", goodTube_proxyIframe_initLoaded);
// Also check if the DOM is already loaded, as if it is, the above event listener will not trigger
if (document.readyState === "interactive" || document.readyState === "complete") {
goodTube_proxyIframe_initLoaded();
}
}
function goodTube_proxyIframe_initLoaded() {
// Hide the DOM elements from the proxy page
let elements = document.querySelectorAll('body > *');
elements.forEach(element => {
element.style.display = 'none';
element.style.opacity = '0';
element.style.visibility = 'hidden';
});
// Remove scrolling
document.body.style.overflow = 'hidden';
// Wait for the DOM to load
document.addEventListener("DOMContentLoaded", () => {
// Hide the DOM elements from the proxy page
let elements = document.querySelectorAll('body > *');
elements.forEach(element => {
element.style.display = 'none';
element.style.opacity = '0';
element.style.visibility = 'hidden';
});
// Change the background colour
document.body.style.background = '#000000';
// Change the background colour
document.body.style.background = '#000000';
// Create a youtube iframe
let youtubeIframe = document.createElement('div');
// Create a youtube iframe
let youtubeIframe = document.createElement('div');
// Add the youtube iframe to the page
document.body.appendChild(youtubeIframe);
// Add the youtube iframe to the page
document.body.appendChild(youtubeIframe);
// Update the content of the youtube iframe
youtubeIframe.innerHTML = `
<iframe
width="100%"
height="100%"
src=""
frameborder="0"
scrolling="yes"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen
id="goodTube_youtube_iframe"
></iframe>
`;
// Update the content of the youtube iframe
youtubeIframe.innerHTML = `
<iframe
width="100%"
height="100%"
src=""
frameborder="0"
scrolling="yes"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen
id="goodTube_youtube_iframe"
></iframe>
`;
// Style the youtube iframe
youtubeIframe.style.position = 'fixed';
youtubeIframe.style.top = '0';
youtubeIframe.style.bottom = '0';
youtubeIframe.style.right = '0';
youtubeIframe.style.left = '0';
youtubeIframe.style.zIndex = '99999';
// Style the youtube iframe
youtubeIframe.style.position = 'fixed';
youtubeIframe.style.top = '0';
youtubeIframe.style.bottom = '0';
youtubeIframe.style.right = '0';
youtubeIframe.style.left = '0';
youtubeIframe.style.zIndex = '99999';
// Listen for messages from the parent window
window.addEventListener('message', goodTube_proxyIframe_receiveMessage);
// Listen for messages from the parent window
window.addEventListener('message', goodTube_proxyIframe_receiveMessage);
});
// Let the parent frame know it's loaded
window.top.postMessage('goodTube_proxyIframe_loaded', '*');
}
// Receive a message from the parent window
@@ -2547,10 +2572,6 @@
if (youtubeIframe) {
// Change the source of the youtube iframe
if (event.data.indexOf('goodTube_src_') !== -1) {
youtubeIframe.addEventListener('load', () => {
window.top.postMessage('goodTube_loaded', '*');
});
youtubeIframe.src = event.data.replace('goodTube_src_', '');
}
// Pass all other messages down to the youtube iframe

View File

@@ -1,7 +1,7 @@
// ==UserScript==
// @name GoodTube
// @namespace http://tampermonkey.net/
// @version 2.005
// @version 2.009
// @description Removes 100% of Youtube ads.
// @author GoodTube
// @updateURL https://github.com/goodtube4u/goodtube/raw/refs/heads/main/goodtube.user.js
@@ -589,7 +589,6 @@
if (goodTube_mobile) {
mobileText = 'true';
}
console.log('sending load message');
goodTube_player.contentWindow.postMessage('goodTube_src_https://www.youtube.com/embed/' + goodTube_getParams['v'] + '?autoplay=1&mobile=' + mobileText + '&goodTube_autoplay=' + goodTube_autoplay, '*');
}
// If we are in picture in picture mode
@@ -1227,13 +1226,11 @@
// Proxy iframe has loaded
else if (event.data === 'goodTube_proxyIframe_loaded') {
console.log('proxy iframe loaded');
goodTube_proxyIframeLoaded = true;
}
// Player iframe has loaded
else if (event.data === 'goodTube_playerIframe_loaded') {
console.log('palyer iframe loaded - showing it');
goodTube_player.style.display = 'block';
}