No Embed Youtube

replace embed iframe, object with anchor link.

目前为 2016-05-13 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name No Embed Youtube
  3. // @description replace embed iframe, object with anchor link.
  4. // @namespace eight04.blogspot.com
  5. // @include http*
  6. // @exclude http://www.youtube.com/*
  7. // @exclude https://www.youtube.com/*
  8. // @version 2.1.0
  9. // @run-at document-start
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. "use strict";
  14.  
  15. //http://www.cnet.com/news/youtubes-new-nocookie-feature-continues-to-serve-cookies/
  16.  
  17. var xpath = "//iframe[contains(@src,'youtube.com/embed/') and not(ancestor::*[@id='YTLT-player'])]|//iframe[contains(@src,'youtube.com/v/') and not(ancestor::*[@id='YTLT-player'])]|//object[./param[contains(@value,'youtube.com/v/')] and not(ancestor::*[@id='YTLT-player'])]|//embed[contains(@src,'youtube.com/v/') and not(ancestor::object) and not(ancestor::*[@id='YTLT-player'])]|//iframe[contains(@src,'youtube-nocookie.com/embed/') and not(ancestor::*[@id='YTLT-player'])]|//iframe[contains(@src,'youtube-nocookie.com/v/') and not(ancestor::*[@id='YTLT-player'])]";
  18.  
  19. var unEmbed = function(node){
  20.  
  21. var result = document.evaluate(
  22. xpath, node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  23.  
  24. var element = null;
  25. var i = 0, j;
  26.  
  27. while(element = result.snapshotItem(i++)){
  28.  
  29. // iframe or embed
  30. var url = element.src;
  31.  
  32. // object
  33. if(!url){
  34. for(j = 0; j < element.childNodes.length; j++){
  35. var pa = element.childNodes[j];
  36. if(pa.nodeName == "PARAM" && pa.getAttribute("name") == "movie"){
  37. url = pa.getAttribute("value");
  38. break;
  39. }
  40. }
  41. }
  42.  
  43. if(!url){
  44. continue;
  45. }
  46.  
  47. // https://developers.google.com/youtube/player_parameters#Manual_IFrame_Embeds
  48. var id = url.match(/(embed|v)\/(.+?)(\?|&|$)/)[2];
  49. var query = url.match(/\?(.+)/);
  50. var a = document.createElement("a");
  51. var pageUrl = "//www.youtube.com/watch?v=" + id;
  52. a.textContent = "http:" + pageUrl;
  53. if (query) {
  54. pageUrl += "&" + query[1];
  55. }
  56. a.href = pageUrl;
  57. a.target = "_blank";
  58. a.className = "unembed";
  59.  
  60. element.parentNode.replaceChild(a, element);
  61. }
  62. };
  63.  
  64. new MutationObserver(function(mutations){
  65. if (document.body) {
  66. unEmbed(document.body);
  67. }
  68. }).observe(document, {
  69. childList: true,
  70. subtree: true
  71. });