// ==UserScript== // @name Newgrounds Audio Download Fix // @namespace https://greasyfork.org/users/246635 // @version 1.1 // @description Adds a direct download button to audio pages on Newgrounds for songs that won't allow it. // @author _darkuwu // @match https://www.newgrounds.com/audio/* // @grant none // @downloadURL https://update.greasyfork.icu/scripts/514415/Newgrounds%20Audio%20Download%20Fix.user.js // @updateURL https://update.greasyfork.icu/scripts/514415/Newgrounds%20Audio%20Download%20Fix.meta.js // ==/UserScript== (function() { 'use strict'; window.addEventListener('load', main); function main() { // Check if the download button already exists if (document.querySelector('.icon-download')) return; // Get the pod-head div to place the new button const podHead = document.querySelector('.pod-head'); if (!podHead) return; // Find the share button to place our new button next to it const shareButton = podHead.querySelector('.icon-share'); if (!shareButton) return; const downloadButton = document.createElement('span'); downloadButton.innerHTML = ` Download this song `; // Insert the download button next to the share button shareButton.insertAdjacentElement('afterend', downloadButton); // Find the audio URL from the meta tag const audioMeta = document.querySelector('meta[property="og:audio"]'); if (!audioMeta) return; let audioUrl = audioMeta.getAttribute('content').split('?')[0]; // Trim to ".mp3" // Get the song ID from the filename const filename = audioUrl.split('/').pop().match(/^(\d+)_/)?.[1] || 'unknown'; const anchor = downloadButton.querySelector('.icon-download'); anchor.href = audioUrl; anchor.setAttribute('download', `${filename}.mp3`); anchor.addEventListener('click', function(event) { event.preventDefault(); // Force download using a temporary element const tempLink = document.createElement('a'); tempLink.href = audioUrl; tempLink.download = `${filename}.mp3`; document.body.appendChild(tempLink); tempLink.click(); document.body.removeChild(tempLink); }); } })();