video watch page URL

Display "https://www.youtube.com/watch?v=***********" of embedded YouTube videos.

当前为 2019-03-08 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name video watch page URL
  3. // @name:ja 埋め込み動画にURL表示
  4. // @namespace https://greasyfork.org/users/19523
  5. // @description Display "https://www.youtube.com/watch?v=***********" of embedded YouTube videos.
  6. // @description:ja ページに埋め込まれたYouTubeの動画の下に動画視聴ページのURLを付け加えます
  7. // @include *
  8. // @exclude http://www.youtube.com/*
  9. // @exclude https://www.youtube.com/*
  10. // @version 0.3.1
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14.  
  15. (function () {
  16.  
  17. var style = document.createElement('style');
  18. style.type = 'text/css';
  19. style.appendChild(document.createTextNode(`\
  20. a.youtube-url {
  21. position: relative;
  22. display: table;
  23. font-size: initial;
  24. }`));
  25. document.getElementsByTagName('head')[0].appendChild(style);
  26.  
  27. var target = document.getElementsByTagName('body')[0];
  28. var config = { childList: true, subtree: true };
  29. var observer = new MutationObserver(function (mutations) {
  30. insertURL();
  31. });
  32.  
  33. window.addEventListener('load', insertURL);
  34.  
  35. function insertURL() {
  36. observer.disconnect();
  37.  
  38. var elements = document.querySelectorAll('iframe[src*="//www.youtube.com/embed/"]:not([class~="youtube-url"])');
  39. for (var i = 0, element; element = elements[i]; i++) {
  40. var a = document.createElement('a');
  41. if (element.src.indexOf('videoseries') >= 0) {
  42. a.href = element.src.replace(/embed\/videoseries/, 'playlist');
  43. } else {
  44. a.href = element.src.split('?')[0].replace(/embed\//, 'watch?v=');
  45. }
  46. a.appendChild(document.createTextNode(a.href));
  47. element.className += a.className = ' youtube-url';
  48.  
  49. if (element.parentElement.children.length <= 2 && element.parentElement.parentElement) {
  50. element = element.parentElement;
  51. }
  52. element.parentElement.insertBefore(a, element.nextSibling);
  53. console.log('Detected URL: %s', elements[i].src);
  54. }
  55.  
  56. var elements = document.querySelectorAll('iframe[src*="//www.youtube-nocookie.com/embed/"]:not([class~="youtube-url"])');
  57. for (var i = 0, element; element = elements[i]; i++) {
  58. var a = document.createElement('a');
  59. if (element.src.indexOf('videoseries') >= 0) {
  60. a.href = element.src.replace(/-nocookie\.com\/embed\/videoseries/, '.com/playlist');
  61. } else {
  62. a.href = element.src.split('?')[0].replace(/-nocookie\.com\/embed\//, '.com/watch?v=');
  63. }
  64. a.appendChild(document.createTextNode(a.href));
  65. element.className += a.className = ' youtube-url';
  66.  
  67. if (element.parentElement.children.length <= 2 && element.parentElement.parentElement) {
  68. element = element.parentElement;
  69. }
  70. element.parentElement.insertBefore(a, element.nextSibling);
  71. console.log('Detected URL: %s', elements[i].src);
  72. }
  73.  
  74. var elements = document.querySelectorAll('iframe[data-src*="//www.youtube.com/embed/"]:not([class~="youtube-url"])');
  75. for (var i = 0, element; element = elements[i]; i++) {
  76. var a = document.createElement('a');
  77. if (element.src.indexOf('videoseries') >= 0) {
  78. a.href = element.src.replace(/embed\/videoseries/, 'playlist');
  79. } else {
  80. a.href = element.src.split('?')[0].replace(/embed\//, 'watch?v=');
  81. }
  82. a.appendChild(document.createTextNode(a.href));
  83. element.className += a.className = ' youtube-url';
  84.  
  85. if (element.parentElement.children.length <= 2 && element.parentElement.parentElement) {
  86. element = element.parentElement;
  87. }
  88. element.parentElement.insertBefore(a, element.nextSibling);
  89. console.log('Detected URL: %s', elements[i].src);
  90. }
  91.  
  92. var elements = document.querySelectorAll('iframe[data-src*="//www.youtube-nocookie.com/embed/"]:not([class~="youtube-url"])');
  93. for (var i = 0, element; element = elements[i]; i++) {
  94. var a = document.createElement('a');
  95. if (element.src.indexOf('videoseries') >= 0) {
  96. a.href = element.src.replace(/-nocookie\.com\/embed\/videoseries/, '.com/playlist');
  97. } else {
  98. a.href = element.src.split('?')[0].replace(/-nocookie\.com\/embed\//, '.com/watch?v=');
  99. }
  100. a.appendChild(document.createTextNode(a.href));
  101. element.className += a.className = ' youtube-url';
  102.  
  103. if (element.parentElement.children.length <= 2 && element.parentElement.parentElement) {
  104. element = element.parentElement;
  105. }
  106. element.parentElement.insertBefore(a, element.nextSibling);
  107. console.log('Detected URL: %s', elements[i].src);
  108. }
  109.  
  110. // Flash-embedded videos
  111. var elements = document.querySelectorAll('embed[src*="//www.youtube.com/v/"]:not([class~="youtube-url"])');
  112. for (var i = 0, element; element = elements[i]; i++) {
  113. var a = document.createElement('a');
  114. a.href = element.src.split('?')[0].replace(/v\//, 'watch?v=');
  115. a.appendChild(document.createTextNode(a.href));
  116. element.className += a.className = ' youtube-url';
  117. element.parentElement.insertBefore(a, element.nextSibling);
  118. console.log('Detected URL: %s', elements[i].src);
  119. }
  120.  
  121. var elements = document.querySelectorAll('embed[src*="//www.youtube-nocookie.com/v/"]:not([class~="youtube-url"])');
  122. for (var i = 0, element; element = elements[i]; i++) {
  123. var a = document.createElement('a');
  124. a.href = element.src.split('?')[0].replace(/-nocookie\.com\/v\//, '.com/watch?v=');
  125. a.appendChild(document.createTextNode(a.href));
  126. element.className += a.className = ' youtube-url';
  127. element.parentElement.insertBefore(a, element.nextSibling);
  128. console.log('Detected URL: %s', elements[i].src);
  129. }
  130.  
  131. observer.observe(target, config);
  132. }
  133.  
  134. })();