VIP LOGIN
SearchPRO
DJ WeaponsRemixes & EditsTrending WeaponsDJ Viral ChartID TrackerPopular TracklistsMashup PacksArchive FeedPRO
CollectionsYour CratesPRO
In The MixCreate TracklistPRO
SpotlightSubmit Your Music
Exclusive DealsPRO
AffiliatesPRO
Account

Contact

Get in touch

We always do our best to reply as soon as possible, usually within 24 hours.

You can reach us directly at [email protected].

' +'
' +'

Opening SoundCloud

One moment please...

'; // ------------------------------------------------------------------------- // OVERLAY — paint button + blocker on each SoundCloud iframe // ------------------------------------------------------------------------- function processEmbed(iframe){ if(iframe.dataset.sctProcessed)return; iframe.dataset.sctProcessed='true'; var parent=iframe.parentElement; if(!parent)return; if(!parent.style.position||parent.style.position==='static'){ parent.classList.add('sct-sc-parent'); } var h=parseInt(iframe.height)||166; var type=h>200?'visual':'mini'; // Click blocker so the SC widget itself can't be clicked var blocker=document.createElement('div'); blocker.className='sct-sc-blocker'; blocker.dataset.playerType=type; blocker.onclick=function(e){e.preventDefault();e.stopPropagation()}; parent.appendChild(blocker); // The actual orange button — clicks intercepted by delegation below var btn=document.createElement('div'); btn.className='sct-sc-button'; btn.dataset.playerType=type; btn.innerHTML=SC_ICON+'SoundCloud \u2192'; btn.title='Open in SoundCloud'; parent.appendChild(btn); } function findEmbeds(){ document.querySelectorAll('iframe[src*="soundcloud.com/player"]:not([data-sct-processed])').forEach(processEmbed); } function initOverlay(){ findEmbeds(); new MutationObserver(findEmbeds).observe(document.body,{childList:true,subtree:true}); } // ------------------------------------------------------------------------- // CLICK INTERCEPTION — route through /r/?u=... // ------------------------------------------------------------------------- // Widget API loader — singleton promise so repeat callers share the same load var widgetApiPromise=null; function loadWidgetApi(){ if(window.SC&&window.SC.Widget)return Promise.resolve(); if(widgetApiPromise)return widgetApiPromise; widgetApiPromise=new Promise(function(resolve,reject){ var s=document.createElement('script'); s.src='https://w.soundcloud.com/player/api.js'; s.onload=resolve; s.onerror=reject; document.head.appendChild(s); }); return widgetApiPromise; } // Extract the public SC track permalink from an iframe src function getPermalink(iframe){ return new Promise(function(resolve){ var m=iframe.src.match(/url=([^&]+)/); if(!m){resolve(null);return} var decoded=decodeURIComponent(m[1]); // Already a public permalink if(decoded.indexOf('soundcloud.com')>-1&&decoded.indexOf('api.soundcloud.com')===-1&&decoded.indexOf('w.soundcloud.com')===-1){ resolve(decoded);return; } // api.soundcloud.com/tracks/NNN → ask Widget API loadWidgetApi().then(function(){ try{ var w=SC.Widget(iframe); w.getCurrentSound(function(sound){ if(sound&&sound.permalink_url)resolve(sound.permalink_url); else resolve(null); }); }catch(e){resolve(null)} }).catch(function(){resolve(null)}); }); } function reset(btn){btn.innerHTML=SC_ICON+'SoundCloud \u2192';btn.classList.remove('loading')} // Write the branded splash into a freshly-opened tab. function paintTab(tab){ if(!tab)return; try{tab.document.open();tab.document.write(TAB_SPLASH);tab.document.close();}catch(e){} } // Event delegation at capture phase — fires BEFORE any button's own onclick function sctAffHandleClick(e){ var btn=e.target.closest('.sct-sc-button'); if(!btn)return; if(e._sctAffHandled)return; e._sctAffHandled=true; e.preventDefault(); e.stopPropagation(); if(e.stopImmediatePropagation)e.stopImmediatePropagation(); var parent=btn.closest('.sct-sc-parent'); if(!parent)parent=btn.parentElement; if(!parent){console.warn('[sct-aff] no parent for button',btn);return} var iframe=parent.querySelector('iframe[src*="soundcloud.com/player"]'); if(!iframe){console.warn('[sct-aff] no iframe under parent',parent);return} // Open the tab NOW, synchronously, while we still have the user gesture, // and immediately paint the branded loading splash into it. var newTab=window.open('','_blank'); paintTab(newTab); btn.classList.add('loading'); btn.innerHTML=SPIN+'Opening...'; getPermalink(iframe).then(function(url){ if(!url){ if(newTab)newTab.close(); btn.innerHTML=SC_ICON+'Error'; setTimeout(function(){reset(btn)},2000); return; } var target=BASE+'?u='+encodeURIComponent(url); if(newTab){ newTab.location.href=target; // redirect the already-open splash tab }else{ window.open(target,'_blank'); // fallback if popup was blocked anyway } btn.innerHTML=TICK+'Opened!'; btn.classList.remove('loading'); setTimeout(function(){reset(btn)},1000); }); } // Bind on BOTH capture and bubble. _sctAffHandled prevents double-execution. document.addEventListener('click',sctAffHandleClick,true); // capture phase document.addEventListener('click',sctAffHandleClick,false); // bubble phase // ------------------------------------------------------------------------- // BOOT // ------------------------------------------------------------------------- if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded',initOverlay); }else{ initOverlay(); } })();

Save to crate

OR