2020-04-29 08:37:43 +00:00
|
|
|
|
/**
|
|
|
|
|
* Free the VIDEO elements: get rid of overlays, and enable the native controls.
|
|
|
|
|
*
|
|
|
|
|
* Useful on https://www.instagram.com/ where the stupid overlays prevent
|
|
|
|
|
* showing the controls and triggering the context menu, so you don’t know how
|
|
|
|
|
* long the video will take and can't play the video in full screen mode.
|
|
|
|
|
*
|
|
|
|
|
* @title Free Viddy
|
|
|
|
|
*/
|
|
|
|
|
(function freeviddy() {
|
|
|
|
|
/* Recursively execute the main logic on the document and its sub-documents. */
|
|
|
|
|
function execute(document) {
|
|
|
|
|
document.addEventListener('touchmove mousemove', function debouncer(event) {
|
|
|
|
|
clearTimeout(debouncer.timeoutId);
|
|
|
|
|
debouncer.timeoutId = setTimeout(function () {
|
|
|
|
|
let elementsUnderPointer = document.elementsFromPoint(event.clientX, event.clientY);
|
|
|
|
|
let overlaysToRemove = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < elementsUnderPointer.length; i++) {
|
|
|
|
|
if ((elementsUnderPointer[i].tagName.toUpperCase() === 'VIDEO' ||
|
|
|
|
|
elementsUnderPointer[i].tagName.toUpperCase() === 'IFRAME') && !elementsUnderPointer[i].xxxJanFreeViddyProcessed) {
|
|
|
|
|
let video = elementsUnderPointer[i];
|
|
|
|
|
video.controls = true;
|
|
|
|
|
video.xxxJanFreeViddyProcessed = true;
|
|
|
|
|
|
|
|
|
|
if (i === 0) {
|
|
|
|
|
} else {
|
|
|
|
|
overlaysToRemove = elementsUnderPointer.slice(0, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (overlaysToRemove.length) {
|
|
|
|
|
overlaysToRemove.forEach(element => element.remove());
|
|
|
|
|
}
|
|
|
|
|
}, 50);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/* Recurse for frames and iframes. */
|
|
|
|
|
try {
|
|
|
|
|
Array.from(
|
|
|
|
|
document.querySelectorAll('frame, iframe, object[type^="text/html"], object[type^="application/xhtml+xml"]')
|
|
|
|
|
).forEach(
|
|
|
|
|
elem => execute(elem.contentDocument)
|
|
|
|
|
);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
/* Catch exceptions for out-of-domain access, but do not do anything with them. */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
execute(document);
|
|
|
|
|
})();
|