您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Provides non-stop music and puts the current song and artist on the title bar. \
- // ==UserScript==
- // @name Swyter Tweaks for Pandora
- // @description Provides non-stop music and puts the current song and artist on the title bar. \
- // Additionally removes advertising, unblocks lyrics, provides a persistent skin selector, enforces the Pandora One layout and places a convenient download button. Nothing more, nothing less.
- // @include http*://www.pandora.com/*
- // @version 2013.06.20
- // @grant GM_getValue
- // @grant GM_setValue
- // @namespace https://gf.qytechs.cn/users/4813
- // ==/UserScript==
- function thingie()
- {
- /* find if the I'm listening button exists and click it if does */
- listen=document.getElementsByClassName("still_listening");
- if (listen.length > 0)
- {
- listen[0].click();
- }
- /* unlock lyrics */
- lyrics=document.querySelector(".lyricsText.unselectable");
- if (lyrics != null)
- {
- for (var i=lyrics.attributes.length; i-->0;)
- {
- lyrics.removeAttributeNode(lyrics.attributes[i]);
- }
- lyrics.classList.add("lyricsText");
- }
- /* direct the download link to the current song, redundant -- but should fix fixefox's strange behavior on mouse down (?) */
- download=document.getElementById("swydwnld");
- download.href=($.jPlayer.prototype.instances.jp_0.data('jPlayer').status.src);
- download.download=mysong.text+"-"+artist.text+"."+($.jPlayer.prototype.instances.jp_0.data('jPlayer').status.formatType || "m4a");
- /* calls itself every 6s */
- setTimeout(thingie,6*1000);
- }
- /* set the Pandora One centered layout */
- document.documentElement.classList.add("width-p1-noAds");
- /* get rid of the in-page advertising container */
- if(ads=document.getElementById("ad_container"))
- {
- ads.parentNode.removeChild(ads);
- }
- /* let's hook the AJAX requests and filter out the audio ads and user tracking */
- XMLHttpRequest.prototype.upon = XMLHttpRequest.prototype.open;
- XMLHttpRequest.prototype.open = function(method,url)
- {
- if(url.match(/proxyAdRequest|mediaserverPublicRedirect|brokenAd|stats|andomedia|tritondigital|doubleclick|imrworldwide|scorecardresearch|analytics/) != null)
- {
- console.info("Audio ad intercepted!",arguments);
- this.abort();
- }
- else
- {
- this.upon.apply(this,arguments);
- }
- }
- /* pick the song and artist fields */
- mysong=document.getElementsByClassName("playerBarSong")[0];
- artist=document.getElementsByClassName("playerBarArtist")[0];
- /* add a download button for the current song */
- document.getElementsByClassName("buttons")[1].innerHTML+="<a id='swydwnld' \
- target='_blank' \
- class='button btn_bg' \
- style='text-decoration:none; font-size:11px; width:52px; padding-left:3px; color:inherit;'> \
- <span style='background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAMCAYAAAC0qUeeAAAA6klEQVR42o2QvQ6CMBSFuzk4OLojccCGAkZNFKQwEPCnZfEBnHxB38LER/AR1EkXpd5bfyJGjDc5adp+57T3EvJWDpd7a5AW7W6m3Egq3JOqcrg4U3+mbNR4jioqYTfKj2DQIAOZ/bQa9rg8PWEUHU3VXzALwOD/gF0uDywU+gsI02FWhhkXa+z6LlHgFLS4noaeCL4IASvSTJI6C+XWi+QFGlRunKuXAfcgMGyIadZ0umF0G2DYOXF+fRq8xwrnBxpnrdJ36EDYcLF/JBUa5F/AV4NBZmESGjDZ4pOU/KpksYyxqU6Y9j7vbuvheB+14VYeAAAAAElFTkSuQmCC) no-repeat 2px 1px;padding-right:17px;'></span>Download</a>";
- download=document.getElementById("swydwnld");
- download.addEventListener("mouseover",function(e)
- {
- e.target.href=($.jPlayer.prototype.instances.jp_0.data('jPlayer').status.src);
- e.target.download=mysong.text+"-"+artist.text+"."+($.jPlayer.prototype.instances.jp_0.data('jPlayer').status.formatType || "m4a");
- })
- /* backup the original title */
- original_title=document.title;
- /* whenever the info dock changes */
- info=document.getElementsByClassName("info")[0];
- info.addEventListener("DOMNodeInserted",function()
- {
- /* set the title bar to the current song */
- document.title=(mysong.text.length > 0 &&
- artist.text.length > 0) ? ("Now playing «"+mysong.text+"» by «"+artist.text+"»") : original_title;
- /* direct the download link to the current song, redundant -- but should fix fixefox's strange behavior on mouse down (?) */
- download=document.getElementById("swydwnld");
- download.href=($.jPlayer.prototype.instances.jp_0.data('jPlayer').status.src);
- download.download=mysong.text+"-"+artist.text+"."+($.jPlayer.prototype.instances.jp_0.data('jPlayer').status.formatType || "m4a");
- })
- /* unlock theme chooser */
- sknTab=document.getElementById("skinTab");
- sknTab.style.display="inherit";
- /* create a new css link and pin it on the document's head, we'll be using it later */
- link=document.createElement("link");
- link.rel="stylesheet";
- document.head.appendChild(link);
- /* ugly jquery callback, launched whenever a theme-preview-button-thingie is clicked */
- $(document).on("mouseup",".skin_definition_container",function(e)
- {
- /* pick our id from .skin_definition_container > a > img[src="/preview_{skinid}.png"] */
- skin_name=e.currentTarget.children[0].children[0].src.match(/preview_(.+)\.png$/)[1];
- /* a few of the preview ids don't match with their css counterparts, if that's the case, fallback... to the pandora designers: that's malapraxis */
- skin_name=(
- { "default": "pandoraone",
- "cosmic": "cosmicrift",
- "sea": "deepseadisco"
- }[skin_name]) || skin_name;
- skin_set();
- console.log("New theme selected!",skin_name);
- })
- function skin_set()
- {
- /* set our previously made CSS link to the selection */
- link.href="http://www.pandora.com/static/pandora_one/skins/"+skin_name+"/skin.css";
- /* store as persistent preference */
- try{ GM_setValue('swyPandoraTheme', skin_name) }catch(e){ localStorage['swyPandoraTheme']=skin_name}
- }
- /* restore a theme in case it has been selected previously. ugly, i know */
- try{ skin_name = GM_getValue('swyPandoraTheme') || skin_name }catch(e){ skin_name = localStorage['swyPandoraTheme'] || skin_name }; skin_set()
- /* call the recurrent function */
- thingie();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址