// ==UserScript== // @name Video Full Screen In Tab // @namespace http://www.icycat.com // @description 让所有视频网页全屏 // @author 冻猫 // @include * // @version 1.5 // @grant none // @run-at document-end // @downloadURL none // ==/UserScript== (function() { var btnDelay = null, isOver = false, fullStatus = false, parentArray = new Array(), backStyle = new Array(), player, playerStyle,controlBtn,leftBtn,rightBtn; createButton(); createFullButton(); console.log('Video Full Screen In Tab 初始化'); document.addEventListener('mouseover', function(e) { if (fullStatus) { return; } var target = e.target; var nodeName = target.nodeName; switch (nodeName) { case 'OBJECT': case 'EMBED': if (target.type == 'application/x-shockwave-flash' && target.offsetWidth > 299 && target.offsetHeight > 199) { player = target; showButton(); } break; case 'IFRAME': case 'VIDEO': if (target.offsetWidth > 299 && target.offsetHeight > 199) { player = target; showButton(); } break; default: if (isOver) return; if (controlBtn.style.display == 'inline') { if (btnDelay) clearTimeout(btnDelay); btnDelay = setTimeout(function() { controlBtn.style.display = 'none'; }, 1000); } return; } }); function createButton() { addStyle('#playerControlBtn {display:none;cursor: pointer;font: 12px "微软雅黑";padding: 2px 2px 3px 2px;margin:0;width:60px;text-align: center;transition: all 0.6s ease-out;position: absolute;z-index:2147483646;background-color: #27A9D8;color:#FFF;opacity:0.5;} #playerControlBtn:hover{opacity:1;}'); var btn = document.createElement('div'); btn.id = 'playerControlBtn'; btn.onclick = function() { playerControl(); }; btn.onmouseover = function() { isOver = true; if (btnDelay) clearTimeout(btnDelay); }; btn.onmouseout = function() { isOver = false; if (btnDelay) clearTimeout(btnDelay); btnDelay = setTimeout(function() { controlBtn.style.display = 'none'; }, 1000); } btn.appendChild(document.createTextNode('网页全屏')); document.body.appendChild(btn); controlBtn = document.getElementById('playerControlBtn'); } function createFullButton() { var leftButton = document.createElement('span'); leftButton.id = 'leftFullStackButton'; leftButton.onclick = function() { playerControl(); }; document.body.appendChild(leftButton); addStyle('#leftFullStackButton{display:none;position:fixed;width:1px;height:100%;top:0;left:0;z-index:2147483646;}'); var rightButton = document.createElement('span'); rightButton.id = 'rightFullStackButton'; rightButton.onclick = function() { playerControl(); }; document.body.appendChild(rightButton); addStyle('#rightFullStackButton{display:none;position:fixed;width:1px;height:100%;top:0;right:0;z-index:2147483646;}'); leftBtn = document.getElementById('leftFullStackButton'); rightBtn = document.getElementById('rightFullStackButton'); } function showButton() { if (btnDelay) clearTimeout(btnDelay); var rect = player.getBoundingClientRect(); var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; var top = rect.top + scrollTop; var left = rect.left; controlBtn.style.display = 'inline'; controlBtn.style.top = (top - 21) + 'px'; controlBtn.style.left = (left + player.offsetWidth - 64) + 'px'; } function addStyle(css) { var style = document.createElement('style'); style.type = 'text/css'; var node = document.createTextNode(css); style.appendChild(node); document.head.appendChild(style); } function playerControl() { checkPlayer(); if (!fullStatus) { fullWin(); } else { smallWin(); } } function checkPlayer() { parentArray = []; var full = player; while (full = full.parentNode) { if (full.getAttribute && full.nodeName != 'OBJECT') { parentArray.push(full); } if (full.nodeName == 'HTML') { break; } } } function fullWin() { if (!fullStatus) { window.addEventListener('resize', fullWin, false); playerStyle = player.style.cssText; leftBtn.style.display = 'inline'; rightBtn.style.display = 'inline'; } for (var i = 0; i < parentArray.length; i++) { if (!fullStatus) { backStyle[i] = parentArray[i].style.cssText; } parentArray[i].style.cssText = 'width:100% !important;height:100% !important;max-width:100% !important;margin:0px !important;padding:0px !important;top:0px !important;left:0px !important;z-index:2147483645 !important;overflow:hidden !important;position:fixed !important;background:#000 !important;border:none !important;display:inline !important;'; } player.style.cssText = 'width:calc(100% - 2px) !important;height:100% !important;z-index:2147483645 !important;position:relative !important;visibility:visible !important;display:inline !important;'; var rect = player.getBoundingClientRect(); player.style.left = (1-rect.left)+'px'; player.style.top = (0-rect.top)+'px'; controlBtn.style.display = 'none'; console.log('网页全屏完成'); fullStatus = true; } function smallWin() { window.removeEventListener('resize', fullWin, false); for (var i = 0; i < parentArray.length; i++) { parentArray[i].style.cssText = backStyle[i]; } player.style.cssText = playerStyle; leftBtn.style.display = 'none'; rightBtn.style.display = 'none'; console.log('恢复完成'); fullStatus = false; } })();