您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Provides a button to pop out the YouTube video in a separate window.
- // ==UserScript==
- // @name YouTube Popout Button [mashup]
- // @description Provides a button to pop out the YouTube video in a separate window.
- // @version 2.0.3
- // @author joeytwiddle
- // @contributor Alek_T, tehnicallyrite
- // @license ISC
- // @include http://*.youtube.com/watch*
- // @include http://youtube.com/watch*
- // @include https://*.youtube.com/watch*
- // @include https://youtube.com/watch*
- // @grant none
- // @namespace https://greasyfork.org/users/8615
- // ==/UserScript==
- // This is a combination of two scripts I found:
- // - http://userscripts-mirror.org/scripts/show/75815#YouTube:_Pop-out_Video
- // - http://userscripts-mirror.org/scripts/show/69687#YouTube_Popout
- // For a while I think I hosted it here (but it never got mirrored):
- // - http://userscripts.org/scripts/show/150631#YouTube_Popout_Button
- // Known issues:
- // - The popout window displays the location bar. I have been unable to hide it.
- let numAttempts = 0;
- function tryToAdd() {
- numAttempts++;
- var divWatchHeadline = document.querySelector('.ytp-right-controls');
- var settingsButton = document.querySelector('.ytp-miniplayer-button');
- if (!divWatchHeadline || !settingsButton) {
- if (numAttempts >= 50) {
- console.warn('[YoUTube Popout Button] Giving up. Never found the divWatchHeadline or the settingsButton.');
- return;
- }
- setTimeout(tryToAdd, 250 * 1.05 ** numAttempts);
- return;
- }
- var buttonPopout = document.createElement("button");
- buttonPopout.setAttribute('aria-label', "Pop-out Video");
- buttonPopout.title = "Pop-out Video";
- buttonPopout.className = 'ytp-popout-button ytp-button';
- buttonPopout.style.padding = '0 4px';
- buttonPopout.innerHTML = `<svg viewBox="0 0 36 36" height="100%" width="100%"><path d="M 27.020989,25.020001 H 9.0209895 v -14.05 L 20.278056,10.969089 20.27853,8.9999999 H 8.9544297 c -1.0730594,0 -1.9334402,0.9 -1.9334402,2.0000001 v 14 c 0,1.1 0.8603808,2 1.9334402,2 H 27.045569 c 1.063393,0 1.97421,-0.885891 1.968683,-1.985877 l 0.0018,-7.014124 h -1.991386 z m -4.80902,-16.0200011 -0.01053,1.9774681 3.525926,-0.0018 -9.547729,9.854341 1.363076,1.41 9.481183,-9.799226 v 3.59 l 1.993516,-0.0095 0.0039,-7.0250141 z" fill="#fff" /></svg>`;
- divWatchHeadline.insertBefore(buttonPopout, settingsButton);
- buttonPopout.addEventListener("click", popOutVideo, false);
- function popOutVideo() {
- // Grabbing Video Id
- function gup(name) {
- name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
- var regexS = "[\\?&]" + name + "=([^&#]*)";
- var regex = new RegExp(regexS);
- var results = regex.exec(window.location.href);
- return results && results[1];
- }
- var ytvidid = gup('v');
- if (ytvidid) {
- //var link = "http://www.youtube.com/watch_popup?v=";
- //var flink = link+ytvidid;
- // The above URL gets redirected to https://www.youtube.com/embed/bNcWVUfwmS4&autoplay=1#at=6
- // And the redirect causes autoplay to not work. So let's go directly to the target URL.
- var flink = "https://www.youtube.com/embed/" + ytvidid + "?autoplay=1";
- var lcheck = location.href;
- // I think this used to prevent infinite loops when the script was auto-forwarding
- if (lcheck !== flink) {
- try {
- var player = window.document.getElementById('movie_player');
- if (player) {
- // If we are in Greasemonkey's sandbox, we need to get out!
- if (player.wrappedJSObject) {
- player = player.wrappedJSObject;
- }
- player.pauseVideo();
- var time = player.getCurrentTime();
- flink += "#at=" + (time | 0);
- }
- } catch (e) {
- console.error("" + e);
- }
- // window.location = flink;
- // Change "YoutubePopout" to "_blank" if you want new popouts to appear in a separate window from the existing popout.
- window.open(flink, "YoutubePopout", "popup=yes,menubar=no,location=no,resizable=yes,status=no,toolbar=no,personalbar=no");
- }
- }
- }
- }
- tryToAdd();