Copy Video Source Link

Copies the source URL of the currently playing video in 9anime, fmovies, and sflix to clipboard, or opens it in a new tab.

目前為 2022-03-20 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Copy Video Source Link
  3. // @namespace https://naeembolchhi.github.io/
  4. // @version 1.11
  5. // @description Copies the source URL of the currently playing video in 9anime, fmovies, and sflix to clipboard, or opens it in a new tab.
  6. // @author NaeemBolchhi
  7. // @include https://9anime.*/*/*
  8. // @include https://fmovies.*/*/*
  9. // @include https://sflix.*/watch*/*
  10. // @exclude https://9anime.me/
  11. // @icon data:image/vnd.microsoft.icon;base64,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
  12. // @run-at document-idle
  13. // @grant none
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. const copySVG = '<svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24"><path d="M21 10v10a1 1 0 0 1-1 1H10a1 1 0 0 1-1-1V10a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1zM6 14H5V5h9v1a1 1 0 0 0 2 0V4a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h2a1 1 0 0 0 0-2z"/></svg>';
  20. const linkSVG = '<svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></svg>';
  21. let playVID, copyCLS, lineGAP;
  22.  
  23. function addStyle(css) {
  24. var head, style;
  25. head = document.getElementsByTagName('head')[0];
  26. if (!head) { return; }
  27. style = document.createElement('style');
  28. style.type = 'text/css';
  29. style.innerHTML = css;
  30. head.appendChild(style);
  31. }
  32.  
  33. function addButton(controls) {
  34. var copy, anchor;
  35. copy = document.createElement('div');
  36. copy.setAttribute("id", "embed-copy");
  37. copy.setAttribute("class", copyCLS);
  38. copy.setAttribute("onclick", `
  39. navigator.clipboard.writeText(` + playVID + `).then((function(){document.getElementById("embed-copy").children[2].innerHTML="Copied!";}),
  40. (function(){document.getElementById("embed-copy").children[2].innerHTML="Failed!";})),
  41. setTimeout((function(){
  42. document.getElementById("embed-link").href = ` + playVID + `;
  43. document.getElementById("embed-link").children[2].innerHTML="Open Link (5)";
  44. document.getElementById("embed-link").style = "display: block";
  45. document.getElementById("embed-copy").style = "display: none";
  46. }),500),
  47. setTimeout((function(){
  48. document.getElementById("embed-link").children[2].innerHTML="Open Link (4)";
  49. }),1500),
  50. setTimeout((function(){
  51. document.getElementById("embed-link").children[2].innerHTML="Open Link (3)";
  52. }),2500),
  53. setTimeout((function(){
  54. document.getElementById("embed-link").children[2].innerHTML="Open Link (2)";
  55. }),3500),
  56. setTimeout((function(){
  57. document.getElementById("embed-link").children[2].innerHTML="Open Link (1)";
  58. }),4500),
  59. setTimeout((function(){
  60. document.getElementById("embed-copy").children[2].innerHTML="Copy Link";
  61. document.getElementById("embed-link").children[2].innerHTML="Open Link";
  62. document.getElementById("embed-link").style = "display: none";
  63. document.getElementById("embed-copy").style = "display: block";
  64. document.getElementById("embed-link").src = "";
  65. }),5500);`);
  66. copy.setAttribute("title", "Copy Embedded Video Link");
  67. copy.innerHTML = copySVG + lineGAP + '<span>Copy Link</span>';
  68.  
  69. anchor = document.createElement('a');
  70. anchor.setAttribute("id","embed-link");
  71. anchor.setAttribute("class", copyCLS);
  72. anchor.setAttribute("style", "display: none;");
  73. anchor.setAttribute("href", '');
  74. anchor.setAttribute("target", "_blank");
  75. anchor.setAttribute("title", "Open Embedded Video Link in a New Tab");
  76. anchor.innerHTML = linkSVG + lineGAP + '<span>Open Link</span>';
  77.  
  78. setTimeout(function() {
  79. controls.appendChild(copy);
  80. controls.appendChild(anchor);
  81. }, 3000);
  82. }
  83.  
  84. if (window.location.hostname.match(/9anime/)){
  85. addStyle(`.copy-style {fill: #ababab;color: #464749;float: right;cursor: pointer;}
  86. .copy-style:hover {fill: #eeeeee;}
  87. .anchor-new {padding: 0 8px;display: inline-block;cursor: pointer;color: #ababab;height: 38px;line-height: 38px;-webkit-transition: all .15s;-moz-transition: all .15s;transition: all .15s;}
  88. .anchor-new:hover {background: #141414;color: #eee;}`);
  89. lineGAP = '<i> </i>';
  90. copyCLS = 'anchor-new copy-style';
  91. playVID = 'document.getElementById("player").getElementsByTagName("iframe")[0].src';
  92. addButton(document.getElementById('controls'));
  93. }
  94.  
  95. if (window.location.hostname.match(/fmovies/)){
  96. addStyle(`.copy-style {fill: #6a727a;color: #464749;cursor: pointer;}
  97. .copy-style:hover {fill: #adb5bd;}
  98. .anchor-new {float: left;line-height: 25px;border-radius: 4px;font-size: .8em;padding: 0 15px;cursor: pointer;border: 1px solid #494f54;color: #6a727a;-webkit-transition: all .2s ease-in-out 0s;-moz-transition: all .2s ease-in-out 0s;transition: all .2s ease-in-out 0s;margin-right: 10px;margin-bottom: 8px;}
  99. .anchor-new:hover {color: #adb5bd;border-color: #6c757d;}`);
  100. lineGAP = '<i> </i>';
  101. copyCLS = 'anchor-new copy-style';
  102. playVID = 'document.getElementById("player").getElementsByTagName("iframe")[0].src';
  103. addButton(document.getElementById('controls').children[0]);
  104. }
  105.  
  106. if (window.location.hostname.match(/sflix/)){
  107. addStyle(`.copy-style {fill: #aaaaaa;color: #aaaaaa;padding: 10px;text-align: center;font-size: 11px;}
  108. .copy-style:hover {fill: #aaaaaa;color: #aaaaaa;background: #464749;}
  109. .copy-style > svg {margin: 0 25px;}
  110. @media only screen and (min-width: 1300px) {
  111. .copy-style {border-radius: 0 0 10px 0;}
  112. }
  113. @media only screen and (max-width: 1299px) {
  114. .copy-style {border-radius: 0;}
  115. .copy-style > svg {margin: 6px 20px 10px 20px;}
  116. }`);
  117. lineGAP = '<br />';
  118. copyCLS = 'dtc-item btn copy-style border-sflix';
  119. playVID = 'document.getElementById("watch-iframe").getElementsByTagName("iframe")[0].src';
  120. addButton(document.getElementsByClassName('dt-content')[0]);
  121. }
  122. })();