Greasy Fork

Greasy Fork is available in English.

My163MusicHelper|网易音乐C+|网易|网易音乐|music.163.com

①美化网易音乐的排布,去除首页某些特别难看的广告或其他用户不友好的页面元素。;②点击播放器的歌曲封面就可以直接下载歌曲,没有侵入页面元素(不想影响美感,当听到自己喜欢的歌的时候不需要进入任何界面直接点击歌曲封面就直接可以下载。;③ 在线播放使用更高音质;

当前为 2017-09-19 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @id            [email protected]
// @name          My163MusicHelper|网易音乐C+|网易|网易音乐|music.163.com
// @namespace     Chang_way_enjoying
// @description   ①美化网易音乐的排布,去除首页某些特别难看的广告或其他用户不友好的页面元素。;②点击播放器的歌曲封面就可以直接下载歌曲,没有侵入页面元素(不想影响美感,当听到自己喜欢的歌的时候不需要进入任何界面直接点击歌曲封面就直接可以下载。;③ 在线播放使用更高音质;
// @description   网易音乐C+|My163MusicHelper|网易|网易音乐
// @author        Chang
// @connect       imdb.com
// @grant         none
// @require       http://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
// @include       http://music.163.com/
// @match         http://music.163.com/*
// @version       06152017nyw
// @run-at        document-start
// ==/UserScript==
var myScriptStyle = document.createElement("style");
myScriptStyle.innerHTML = "@charset utf-8;.download,a[class='btnl click-flag f-alpha'],a[class='btnr click-flag f-alpha'],#g_backtop,div.g-ft,ul.m-nav.j-tflag>li.lst,#j-music-ad,div.m-multi{display:none}a.btnr.click-flag.f-alpha[hidefocus=true]{right:184px}";
document.getElementsByTagName("head")[0].appendChild(myScriptStyle);
var myScriptInject = document.createElement("script");
    myScriptInject.type = "text/javascript";
    myScriptInject.innerHTML = '';
    document.getElementsByTagName("head")[0].appendChild(myScriptInject);
var myScriptInject = document.createElement("script");
    myScriptInject.type = "text/javascript";
    myScriptInject.innerHTML = 'window.encrypt_data = function (data) { var pubKey = \'010001\'; var modulus = \'00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\'; var nonce = \'0CoJUm6Qyw8W8jud\'; return window.asrsea(JSON.stringify(data), pubKey, modulus, nonce); };';
    document.getElementsByTagName("head")[0].appendChild(myScriptInject);
var myScriptInject = document.createElement("script");
    myScriptInject.type = "text/javascript";
    myScriptInject.innerHTML = 'var hookXhrResponse, parseXhrResponse, xhr_open; parseXhrResponse = function(xhr) { var appfix, data, filename, i, len, privilege, ref, request, results; request = { url: xhr._url, data: xhr._data }; if (request.url.startsWith(\'/weapi/song/enhance/player/url\')) { data = JSON.parse(xhr.responseText); if (data.code === 200) { $("#g_player > div.head > a.mask").attr(\'href\', data.data[0].url).attr(\'target\', \'_blank\').attr(\'data-url\', data.data[0].url); filename = $("#g_player > div.play > div.words > a.name").text() + \' - \' + $("#g_player > div.play > div.words > span.by").text(); appfix = data.data[0].url.split(\'.\'); appfix = appfix[appfix.length - 1]; filename = filename + \'.\' + appfix; $("#g_player > div.head > a.mask").attr(\'download\', filename).attr(\'title\', filename); } } else if (request.url.startsWith(\'http://music.163.com/weapi/v3/playlist/detail\')) { data = JSON.parse(xhr.responseText); ref = data.privileges; results = []; for (i = 0, len = ref.length; i < len; i++) { privilege = ref[i]; results.push(null); } return results; } }; hookXhrResponse = function(xhr) { var data, i, len, privilege, ref, request; request = { url: xhr.xhr._url, data: xhr.xhr._data }; if (request.url.startsWith(\'http://music.163.com/weapi/v3/playlist/detail\')) { data = JSON.parse(xhr.responseText); data.playlist.highQuality = true; ref = data.privileges; for (i = 0, len = ref.length; i < len; i++) { privilege = ref[i]; if (privilege.maxbr) { privilege.fl = privilege.dl = privilege.maxbr; } privilege.payed = 1; } xhr.responseText = xhr.xhr.responseText = JSON.stringify(data); } }; xhr_open = function(arg, xhr) { var tag_a; if (arg[1].startsWith(\'/weapi/song/enhance/player/url\')) { tag_a = $("#g_player a[href^=\'/song?id\']"); if (tag_a.length) { music_id(tag_a.attr(\'href\').split(\'/song?id=\')[1]); return arg[1] = \'/weapi/song/enhance/player/url_fuckup\'; } } };';
    document.getElementsByTagName("head")[0].appendChild(myScriptInject);
var myScriptInject = document.createElement("script");
    myScriptInject.type = "text/javascript";
    myScriptInject.innerHTML = 'window.myScriptData = {}; !function (ob) { ob.hookAjax = function (funs) { window._ahrealxhr = window._ahrealxhr || XMLHttpRequest; XMLHttpRequest = function () { this.xhr = new window._ahrealxhr; for (var attr in this.xhr) { var type = ""; try { type = typeof this.xhr[attr] } catch (e) { } if (type === "function") { this[attr] = hookfun(attr); } else { Object.defineProperty(this, attr, { get: getFactory(attr), set: setFactory(attr) }) } } }; function getFactory(attr) { return function () { return this.hasOwnProperty(attr + "_") ? this[attr + "_"] : this.xhr[attr]; } } function setFactory(attr) { return function (f) { var xhr = this.xhr; var that = this; if (attr.indexOf("on") != 0) { this[attr + "_"] = f; return; } if (funs[attr]) { xhr[attr] = function () { funs[attr](that) || f.apply(xhr, arguments); } } else { xhr[attr] = f; } } } function hookfun(fun) { return function () { var args = [].slice.call(arguments); if (funs[fun] && funs[fun].call(this, args, this.xhr)) { return; } return this.xhr[fun].apply(this.xhr, args); } } return window._ahrealxhr; }; ob.unHookAjax = function () { if (window._ahrealxhr) XMLHttpRequest = window._ahrealxhr; window._ahrealxhr = undefined; } }(window); function ajaxEventTrigger(event) { var ajaxEvent = new CustomEvent(event, {detail: this}); window.dispatchEvent(ajaxEvent); } hookAjax({ onreadystatechange: function (xhr) { if (xhr.xhr.readyState === xhr.DONE && xhr.xhr.status === 200) { if (xhr.xhr._url.startsWith(\'http://music.163.com/weapi/v3/playlist/detail\')) { data = JSON.parse(xhr.xhr.responseText); data.playlist.highQuality = true; ref = data.privileges; for (i = 0, len = ref.length; i < len; i++) { privilege = ref[i]; if (privilege.maxbr) { privilege.fl = privilege.dl = privilege.maxbr; } privilege.payed = 1; } xhr.responseText = xhr.xhr.responseText = JSON.stringify(data); } parseXhrResponse(xhr.xhr); } }, onload: function (xhr) { }, open: function (arg, xhr) { xhr._url = arg[1]; xhr.addEventListener(\'loadend\', function (a) { parseXhrResponse(a.target); }) }, send: function (arg, xhr) { if (arg) xhr._data = arg[0]; if (xhr._url.startsWith(\'/weapi/song/enhance/player/url\')) { tag_a = $("#g_player a[href^=\'/song?id\']"); if (tag_a.length) { music_id = tag_a.attr(\'href\').split(\'/song?id=\')[1]; csrf_token = xhr._url.split(\'?csrf_token=\')[1]; _hook_data = encrypt_data({ "ids": [music_id], "br": 999000 }); arg[0] = \'params=\' + encodeURIComponent(_hook_data.encText) + \'&encSecKey=\' + encodeURIComponent(_hook_data.encSecKey); } } } });';
    document.getElementsByTagName("head")[0].appendChild(myScriptInject);
if (!document.getElementById("gnuAns") && document.title.indexOf('网易云音乐') !== -1) {
    var gnuAns = document.createElement("a");
    gnuAns.id = "gnuAns";
    document.getElementsByTagName("html")[0].appendChild(gnuAns);

    if (location.href.startsWith('http://music.163.com')) {

        $(document).ready(function() {
            var getDoc, getJSON, postDoc;
            getDoc = function(url, meta, callback) {
                GM_xmlhttpRequest({
                    method: 'GET',
                    url: url,
                    headers: {
                        'User-agent': window.navigator.userAgent,
                        'Content-type': null
                    },
                    onload: function(responseDetail) {
                        var doc;
                        doc = '';
                        if (responseDetail.status == 200) {
                            doc = (new DOMParser).parseFromString(responseDetail.responseText, 'text/html');
                            if (doc == undefined) {
                                doc = document.implementation.createHTMLDocument('');
                                doc.querySelector('html').innerHTML = responseText;
                            }
                        }
                        callback(doc, responseDetail, meta);
                    }
                });
            };
            postDoc = function(url, data, meta, callback) {
                GM_xmlhttpRequest({
                    anonymous: true,
                    method: 'POST',
                    url: url,
                    headers: {
                        'User-agent': window.navigator.userAgent,
                        'Content-type': 'application/x-www-form-urlencoded'
                    },
                    data: data,
                    onload: function(responseDetail) {
                        callback(responseDetail.responseText, responseDetail, meta);
                    }
                });
            };
            getJSON = function(url, callback) {
                GM_xmlhttpRequest({
                    method: 'GET',
                    url: url,
                    headers: {
                        'Accept': 'application/json'
                    },
                    onload: function(response) {
                        if (response.status >= 200 && response.status < 400) {
                            callback(JSON.parse(response.responseText), url);
                        } else {}
                    }
                });
            };
            var checkin;
            checkin = $('a[data-action=checkin] > i');
            if (checkin) {
                checkin.click();
            }
        });
    }

}