Automatically rotate device when video goes fullscreen
当前为
// ==UserScript==
// @name Auto-Rotate Video Fullscreen
// @namespace http://tampermonkey.net/
// @version 1.2
// @description Automatically rotate device when video goes fullscreen
// @match *://*/*
// @grant window.orientation
// @grant window.screen
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
// Function to check if an element is in full screen
function isFullScreen(element) {
return (
document.fullscreenElement === element ||
document.webkitFullscreenElement === element ||
document.mozFullScreenElement === element ||
document.msFullscreenElement === element ||
element.webkitDisplayingFullscreen ||
element.fullscreen
);
}
// Function to attempt screen rotation
function rotateScreen(landscape) {
try {
// Method 1: Screen Orientation API
if (screen.orientation && screen.orientation.lock) {
screen.orientation.lock(landscape ? 'landscape-primary' : 'portrait-primary')
.catch(() => {});
}
// Method 2: Explicit window.orientation manipulation
if (window.orientation !== undefined) {
window.orientation = landscape ? 90 : 0;
}
} catch (error) {
// Silently handle rotation errors
}
}
// Full screen change handler
function handleFullscreenChange(event) {
const target = event.target;
if (target.tagName.toLowerCase() === 'video' ||
target.tagName.toLowerCase() === 'iframe' ||
target.querySelector('video, iframe')) {
const isCurrentlyFullScreen = isFullScreen(target);
rotateScreen(isCurrentlyFullScreen);
}
}
// Function to add fullscreen listeners to an element
function addFullscreenListeners(element) {
element.addEventListener('fullscreenchange', handleFullscreenChange);
element.addEventListener('webkitfullscreenchange', handleFullscreenChange);
element.addEventListener('mozfullscreenchange', handleFullscreenChange);
element.addEventListener('MSFullscreenChange', handleFullscreenChange);
}
// Initial setup function
function init() {
// Add global fullscreen listeners
document.addEventListener('fullscreenchange', handleFullscreenChange);
document.addEventListener('webkitfullscreenchange', handleFullscreenChange);
document.addEventListener('mozfullscreenchange', handleFullscreenChange);
document.addEventListener('MSFullscreenChange', handleFullscreenChange);
// Find and add listeners to existing video elements
const videoElements = document.querySelectorAll('video, iframe');
videoElements.forEach(video => {
addFullscreenListeners(video);
});
// Observe for dynamically added video elements
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === 'childList') {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
const videos = node.querySelectorAll('video, iframe');
if (videos.length > 0) {
videos.forEach(video => {
addFullscreenListeners(video);
});
}
}
});
}
});
});
// Start observing the entire document
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
}
// Run initialization
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();