您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
enhanced youtube
- // ==UserScript==
- // @name youtube_ex
- // @namespace http://userscripts.org/users/
- // @include https://www.youtube.com/*
- // @version 0.2
- // @grant none
- // @description enhanced youtube
- // ==/UserScript==
- //====== common ========
- function parseQueryStringToDictionary(queryString)
- {
- var dictionary = {};
- var pos=queryString.indexOf('?');
- if (pos>=0)
- {
- queryString = queryString.substr(pos+1);
- }
- var parts = queryString.split('&');
- for(var i = 0; i < parts.length; i++)
- {
- var keyValuePair = parts[i].split('=');
- var key = keyValuePair[0];
- var value = keyValuePair[1];
- value = decodeURIComponent(value);
- value = value.replace(/\+/g, ' ');
- dictionary[key] = value;
- }
- return dictionary;
- }
- var obv_cfg={attributes: false, childList: true, characterData: false};
- function observer_factory(callback, isforeach=true)
- {
- var cb=isforeach ? function(mutations) {mutations.forEach(callback);} : callback;
- return new MutationObserver(cb);
- }
- function simpleRemoveElement(sel)
- {
- var sep=sel.indexOf("##");
- var selector=sep>=0 ? sel.substr(sep+2) : sel;
- var node=document.querySelector(selector);
- if (node) node.parentNode.removeChild(node);
- }
- function killElementAttribute(attrname)
- {
- var nodes=document.querySelectorAll('['+attrname+']');
- for (var i=0;i<nodes.length;i++)
- {
- nodes[i].removeAttribute(attrname);
- }
- }
- //======= end of common =========
- function trackless()
- {
- observer_factory(function (stub) {
- killElementAttribute("data-sessionlink");
- killElementAttribute("data-visibility-tracking");
- },false).observe(document.body, obv_cfg);
- }
- trackless();
- function norecommend()
- {
- Array.prototype.slice.call(document.querySelectorAll("span.view-count")).filter(function (node){
- return /Recommended for you/i.test(node.innerHTML);
- }).forEach(function (node){
- var pnode=node.parentNode;
- while (pnode.tagName.toLowerCase()!="a" || Array.prototype.slice.call(pnode.classList).indexOf("content-link")<0){
- if (pnode==document.body) return;
- pnode=pnode.parentNode;
- }
- var recommend_link=pnode.href;
- while (pnode.tagName.toLowerCase()!="li" || Array.prototype.slice.call(pnode.classList).indexOf("video-list-item")<0){
- if (pnode==document.body) return;
- pnode=pnode.parentNode;
- }
- pnode.parentNode.removeChild(pnode);
- var vid=parseQueryStringToDictionary(recommend_link).v;
- //Array.prototype.slice.call(document.querySelectorAll('a#ytp-suggestion-set[href*="'+vid+'"]'));
- });
- }
- norecommend();