您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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();
- }
- })();