您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
You can pop up embeded videos by right click. (It may require permission for pop up blocker at the first pop)
当前为
- // ==UserScript==
- // @name YouTube Embedded Popupper
- // @namespace knoa.jp
- // @description You can pop up embeded videos by right click. (It may require permission for pop up blocker at the first pop)
- // @description:ja YouTubeの埋め込み動画を、右クリックからポップアップで開けるようにします。(初回のみポップアップブロックの許可が必要かもしれません)
- // @include https://www.youtube.com/embed/*
- // @include https://www.youtube-nocookie.com/embed/*
- // @version 2.0
- // @grant none
- // ==/UserScript==
- (function (){
- const SCRIPTNAME = 'YouTubeEmbeddedPopupper';
- const DEBUG = false;
- console.time(SCRIPTNAME);
- const POPUPWIDTH = 640;/*width of popup window*/
- const READYDURATION = '2.5s';/*for ready animation*/
- const POPUPTITLE = 'Right Click to Popup';/*shown on mouse hover*/
- const PARAMS = [/* Overwrite parameters */
- 'autoplay=1',/*autoplay*/
- 'controls=2',/*show controls*/
- 'disablekb=0',/*enable keyboard control*/
- 'fs=1',/*enable fullscreen*/
- 'rel=0',/*not to show relative videos*/
- 'popped=1',/*(original)prevent grandchild popup*/
- ];
- let core = {
- initialize: function(){
- /* Prevent grandchild popup and enables shortcut keys on popupped window */
- if(location.href.includes('popped=1')) return setTimeout(function(){document.querySelector('video').focus();}, 100);
- /* Ready indicators */
- window.addEventListener('load', core.showReadyAnimation, true);
- document.body.title = POPUPTITLE;
- /* Right Click to Popup */
- document.body.addEventListener('contextmenu', function(e){
- /* Define elements */
- let player = document.querySelector('.html5-video-player');
- let time = document.querySelector('.ytp-progress-bar');
- /* Stop playing */
- if(player.classList.contains('playing-mode')) player.click();
- /* Get current time */
- let t = time.attributes['aria-valuetext'].textContent.split('/')[0].split(':').map(t => parseInt(t)).reverse();
- let start = 0;
- switch(t.length){
- case(3):
- start += t[2]*60*60;
- case(2):
- start += t[1]*60;
- case(1):
- start += t[0];
- }
- let params = PARAMS.concat('start=' + start);/*use params at local scope*/
- /* Build URL */
- /* (Duplicated params are overwritten by former) */
- let l = location.href.split('?');
- let url = l[0] + '?' + params.join('&');
- if(l.length === 2) url += ('&' + l[1]);
- /* Open popup window */
- /* (Use URL for window name to prevent popupping the same videos) */
- window.open(url, location.href, [
- 'width=' + POPUPWIDTH,
- 'height=' + (POPUPWIDTH / document.body.offsetWidth) * document.body.offsetHeight,
- ].join(','));
- e.preventDefault();
- e.stopPropagation();
- }, {capture: true});
- },
- showReadyAnimation: function(e){
- let ready = document.createElement('div');
- ready.style.position = 'absolute';
- ready.style.margin = 'auto';
- ready.style.top = ready.style.bottom = '0';
- ready.style.left = '50%';
- ready.style.width = ready.style.height = '0px';
- ready.style.borderRadius = '0px';
- ready.style.background = 'rgba(255,255,255,1.0)';
- ready.style.transitionDuration = READYDURATION;
- ready.addEventListener('transitionend', function(){
- document.body.removeChild(ready);
- });
- document.body.appendChild(ready);
- requestAnimationFrame(function(){
- let size = Math.hypot(document.body.clientWidth, document.body.clientHeight);
- ready.style.width = ready.style.height = size + 'px';
- ready.style.left = 'calc(50% - ' + size + 'px / 2)';
- ready.style.borderRadius = size + 'px';
- ready.style.background = 'rgba(255,255,255,0.0)'
- });
- },
- };
- let log = (DEBUG) ? console.log.bind(null, SCRIPTNAME + ':') : function(){};
- core.initialize();
- console.timeEnd(SCRIPTNAME);
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址