Embed to HTML5

Replaces media embed tags with HTML5 equivalents

  1. // ==UserScript==
  2. // @name Embed to HTML5
  3. // @namespace DoomTay
  4. // @description Replaces media embed tags with HTML5 equivalents
  5. // @include *
  6. // @version 1.1.2
  7. // @exclude *.svg
  8. // @grant none
  9.  
  10. // ==/UserScript==
  11.  
  12. var embeds = document.embeds;
  13.  
  14. var audioFiletypes = [".mp3",".wav",".ogg"];
  15. var videoFiletypes = [".mp4"];
  16.  
  17. var bgsound = document.querySelector("bgsound");
  18. if(bgsound && audioFiletypes.some(type => decodeURIComponent(bgsound.getAttribute("src")).includes(type)))
  19. {
  20. var replacement = document.createElement("audio");
  21. replacement.src = decodeURIComponent(bgsound.getAttribute("src"));
  22. replacement.style.display = "none";
  23. replacement.loop = parseBool(bgsound.getAttribute("loop")) || bgsound.getAttribute("loop") == "-1" || bgsound.getAttribute("loop") == "infinite";
  24. replacement.autoplay = "true";
  25. bgsound.parentNode.replaceChild(replacement, bgsound);
  26.  
  27. if(bgsound.getAttribute("loop") && bgsound.getAttribute("loop") != "infinite" && parseInt(bgsound.getAttribute("loop")) > 0)
  28. {
  29. var playCount = parseInt(bgsound.getAttribute("loop")) - 1;
  30.  
  31. replacement.addEventListener('ended', function(){
  32. if(playCount > 0)
  33. {
  34. playCount--;
  35. replacement.play();
  36. }
  37. });
  38. }
  39. }
  40.  
  41. if(embeds.length > 0)
  42. {
  43. for(var e = embeds.length - 1; e >= 0; e--)
  44. {
  45. if(audioFiletypes.some(type => embeds[e].src.includes(type))) var replacement = document.createElement("audio");
  46. else if(videoFiletypes.some(type => embeds[e].src.includes(type))) var replacement = document.createElement("video");
  47. else continue;
  48. replacement.src = decodeURIComponent(embeds[e].src);
  49. replacement.width = embeds[e].width;
  50. replacement.height = embeds[e].height;
  51. if(embeds[e].hidden) replacement.style.display = "none";
  52. replacement.autoplay = parseBool(embeds[e].getAttribute("autostart") || embeds[e].getAttribute("autoplay")) || audioFiletypes.some(elem => window.location.href.includes(elem));
  53. replacement.controls = parseBool(embeds[e].getAttribute("controller"));
  54. replacement.loop = parseBool(embeds[e].getAttribute("loop"));
  55. var oldEmbed;
  56. if(embeds[e].parentNode.nodeName == "OBJECT")
  57. {
  58. oldEmbed = embeds[e].parentNode.parentNode.replaceChild(replacement, embeds[e].parentNode);
  59. }
  60. else
  61. {
  62. oldEmbed = embeds[e].parentNode.replaceChild(replacement, embeds[e]);
  63. }
  64. if(oldEmbed.name)
  65. {
  66. replacement.setAttribute("name", oldEmbed.name);
  67. document[replacement.getAttribute("name")] = replacement;
  68. }
  69. }
  70. }
  71.  
  72. function getBitrate(media)
  73. {
  74. console.log(media);
  75. return 44;
  76. }
  77.  
  78. function parseBool(string)
  79. {
  80. return string == "true";
  81. }