YouTube PiP Enabler (Chromium 70+)

Adds PiP button in YouTube Player

  1. // ==UserScript==
  2. // @author nik9
  3. // @name YouTube PiP Enabler (Chromium 70+)
  4. // @namespace Violentmonkey Scripts
  5. // @include *://youtube.com/*
  6. // @include *.youtube.com/*
  7. // @version 1.0
  8. // @description Adds PiP button in YouTube Player
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. var playerReady = setInterval(function() {
  13. if (document.querySelector("div.ytp-right-controls") && document.querySelector("video")) {
  14. clearInterval(playerReady);
  15. var btn = document.createElement("button");
  16. btn.type = "button";
  17. btn.className = "ytp-button"
  18. btn.title = "Toggle PiP";
  19. btn.innerHTML = '<svg width="100%" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs> <style> .cls-1 { fill: #fff; fill-rule: evenodd; } .cls-2 { fill: none; stroke: #fff; stroke-width: 3px; } </style> </defs> <path id="Прямоугольник_1" data-name="Прямоугольник 1" class="cls-1" d="M18.548,17.931h7.119v4.034H18.548V17.931Z"/> <rect id="Прямоугольник_2" data-name="Прямоугольник 2" class="cls-2" x="5" y="9" width="26" height="18"/></svg>';
  20. var videoReady = setInterval(function() {
  21. if (document.querySelector("video").readyState === 4) {
  22. clearInterval(videoReady);
  23. var video = document.querySelector("video")
  24.  
  25. console.log("Видео пашол")
  26.  
  27. let pipWindow;
  28.  
  29. video.addEventListener('enterpictureinpicture', function(event) {
  30. console.log('Плеер вошел в PiP');
  31. });
  32.  
  33. video.addEventListener('leavepictureinpicture', function(event) {
  34. console.log('Плеер вышел из PiP');
  35. });
  36.  
  37. if ('pictureInPictureEnabled' in document) {
  38. setPipButton();
  39. video.addEventListener('loadedmetadata', setPipButton);
  40. video.addEventListener('emptied', setPipButton);
  41. } else {
  42. btn.hidden = true;
  43. }
  44.  
  45. function setPipButton() {
  46. btn.disabled = (video.readyState === 0) || !document.pictureInPictureEnabled || video.disablePictureInPicture;
  47. }
  48.  
  49. document.querySelector("div.ytp-right-controls").insertBefore(btn, document.querySelector("button.ytp-fullscreen-button"));
  50. btn.addEventListener("click", function() {
  51. console.log('Включение PiP...');
  52. btn.disabled = true;
  53. try {
  54.  
  55. if (video !== document.pictureInPictureElement)
  56. video.requestPictureInPicture();
  57. else
  58. document.exitPictureInPicture();
  59.  
  60. } catch(error) {
  61. console.log(`Бля! ${error}`);
  62. } finally {
  63. btn.disabled = false;
  64. }
  65. });
  66. }
  67. },100)
  68. }
  69. },100)

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址