您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Checks if the blogs you're following also follow you
当前为
// ==UserScript== // @name DashPlus - Follow Back Checker // @namespace http://www.dashpl.us/ // @description Checks if the blogs you're following also follow you // @include *www.tumblr.com/following // @include *www.tumblr.com/following/* // @version 2.0.2 // @grant none // @run-at document-end // ==/UserScript== //var check_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYBQTFRFUqhUttq2XK1ePHs9TqJQ/f799fr1LFstyuXLvd6+KVUq6vTqUKZSHjMfSJZKRpFIZbJn8/nzXq5gT6RRTZ5PcLhyS5tMRZBHdLp2VqtYHj8fFSsVk8mUcrhzi8WM3+/fUKVSqNSputy7WKtas9m0Y7FlqdSqv9/AQolEqNOpZ7NpQohDgY2BU2NTuNy5Nkk3iMSK1+PX7vDuJzwo3uPe1OnU7/fviMOJkb6TN3I43O3cLl8wqtWrmMuZnM6dl6GX0uXT5/PnQmtDqbGqMmczxM7EwuDCv8zAv86/Xo5fNFs1WqlcWaxbn8+g2ezZoaqhtcO1sdizzubPaJRpQ4xFQYZChL+F1trXSI5Kt9q4jcaOcrl0+fz6YLBie718ms2b6Oro2ufaP4NB3eTdSnpLOXU6kMeRj8eQZnRmaXdpeLR6bXtud7t4m82cXHRcjLeNm6mblriX8fXy8Pfw8/fzeZZ6U6lV6PPo7PXsaLRqbbZvS1xMQWFC0ejSUahT////lfBh+AAAAIB0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wA4BUtnAAABLUlEQVR42mKoxwIYwCRrsRUHp5K6qRmSoGBtpGJumpxcVLoeG0yQW11TLlpAiCm2UlTWwBEiWBFpl8NUVgcEDJJCQhKCIMEYpXhZZYY6MGBirGKxAAqy+vnG+UDFZOXVyoQjEusZuAPlVKFi5mwydQwKIYWCDEG2EsoQMZl6GSCpIO5pyMAYJlAG0QsWAwqmeDCoyTKBxbTY1MG0sLZTAIONgCSTokpdnbw8xBCR1BpXBjdVBiaOehnFelmIIJ91nglDeRgLDxMbdz1Ecx0Ls5Q/0PEOfCLCmvX1WnUQa7j0jUDezNfm865XgdjCby3tDPZ7SXCqRpYwSJlYEpe0DjSUikrZLTX4xPhCXaR47eHhyeqe58XOziVlnBmOFPL1yQUZ1brZzgkQHkCAAQAJGIOAIXi03wAAAABJRU5ErkJggg=="; //var check_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXBJREFUeNqslcsvA1EYxWfGNN6jqkK9QmvjESwEW2Fr4X9lZ2mHSNio1KaxIBJCCVU1zpFzk5smw1z6Jb%2F0tjP3zPked%2BrHcey1M3x9zoNNMPxHnSo4gLlqgEUH2P2HGGMK7HARgj6Qcdj8Bi5BDcRiCBSMoGucgyMJMgbAujEVOIrdSvAevMpdCcwYcy6CDXAM7kBTeym2ACJzk4vglajL2ThYUjMDV8EnuWPdPkEWLIPJ1obaTWmqgw393qMH8vsZuAYfoFNpzuoeL0mQYmVtjJQOO3gDTsG7DkIRLNp1SxJkXR7UxUizxaE%2FUVcZI2AV5JPKZQt2a0OvRqKimpV1nQdgDUz8dBDsp9DNoJ7O9C%2FAodYZpTmnGnppBBn9YFTrupyGOqsboOu3cWgVZNfGlJ4v1zmwpbr6roKh6liUm7xea4U0YkbgWbNmCs3uboMVucqlHP6acciB3gMv1kWmPO0g9gj2v9%2FY7f4L%2BBJgAK%2B%2FTCvBclH%2BAAAAAElFTkSuQmCC"; //var question_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP5JREFUeNqslVELgjAQx91a9iBiUfggPfT9P1f0EIRICBVT%2B1%2FcYJm6uTw4ps773f%2B2m4qu66IlTfCYwLfwdSDnCS8h7iEZevgDRraB7%2BlCwVeWUtvucI2s1VdJQmQYUo79qVaNZLwA9BqaoASAUrKiF%2F8ByhFgMlUfoC1X4K0wYxUpw%2Bk9gpwZRjZYgZoQcuzdawtGFs8F2lYBVlobI1l9ELC0dxqwmNtMhQDbHoxaZjcVIF1AC6ZcMB%2BFCqDTnCPjAmr4lZqc1y53xbhKrs2J4bF2KZTRwuYCJlyqaZfUZw0bqmjki0PzBWA%2B4hqjkGA38yDQNDMisfQv4C3AAHp3Vn27XeuSAAAAAElFTkSuQmCC"; var idPrefix = "dashplus_follow_back_"; var classPrefix = idPrefix; var followBackCss = '.'+classPrefix+'status{ float: left; font-family: tumblr-icons; font-size: 30px !important; font-weight: normal; height: 27px !important; margin: 4px 11px 4px 0; padding: 0 10px 0 6px !important; text-align: center; width: 13px; } .follower .info{ width: 358px; } .viewhide{ visibility: hidden; } .'+classPrefix+'sideblog{ padding: 0 14px 0 1px !important } .follower .poptica_header.popover_standalone{ margin-left: 42px; } .'+classPrefix+'status ~ .poptica_header.popover_standalone{ margin-left: 0px; }'; function run(){ document.getElementsByTagName('head')[0].insertAdjacentHTML('beforeend','<style type="text/css">' + followBackCss + '</style>'); blogTabs = document.querySelectorAll('.tab_blogs .tab_blog:not(.tab_dashboard)'); blogs = new Array(); Array.prototype.forEach.call(blogTabs, function(blogTab){ blogs.push(blogTab.getAttribute('id').slice(9)); }); me = blogs[0]; //Use the first blog from the user's sidebar by default drop_down_menu(blogs,me); run_check(me); } function drop_down_menu(blogs,me){ //Construct a link var blogLink = document.createElement('div'); blogLink.insertAdjacentHTML('beforeend', '<a href="//www.tumblr.com/blog/'+me+'">'+me+'</a>'); //Create a container for the text and the link container = document.createElement('div'); container.insertAdjacentHTML('beforeend', 'You are seeing blogs that follow ' + blogLink.outerHTML ); //And put that container in another box div = document.createElement('div'); div.insertAdjacentHTML('beforeend',container.outerHTML); div.className += ' grey_note'; div.style.overflow = 'hidden'; div.style.marginTop = '20px'; div.setAttribute('id',idPrefix + 'sidebar_box'); //And then add it to the sidebar document.getElementById('right_column').insertAdjacentHTML('beforeend',div.outerHTML); } function run_check(me){ followerDivs = document.querySelectorAll('div#following div.follower'); Array.prototype.forEach.call(followerDivs, function(followerDiv){ if(followerDiv.className.indexOf(classPrefix + "checked") < 0){ followerDiv.className += " " + classPrefix + "checked"; var nameLink = followerDiv.querySelector('.info .name > a'); if(nameLink !== null && 'null' !== nameLink){ //Because JavaScript fails at having a "continue" operator. var name = nameLink.innerHTML; console.log(name); if(name !== null && name !== ''){ //Okay, now let's do an Ajax POST request var xhr = new XMLHttpRequest(); xhr.open('GET',encodeURI('/svc/blog/followed_by?' + encodeURI('tumblelog='+me+'&query='+name))); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.onload = function(){ var icon = document.createElement('div'); icon.className += " " + classPrefix + "status"; //The response has finished, let's check the response if(xhr.status == 200){ //If the response status is OK var data = JSON.parse(xhr.responseText); //Parse the JSON response //console.log(data); var followerRow = followerDiv.querySelector('.info'); if(data.response.is_friend == 1){ //The user is following back icon.className += " chrome green big"; icon.innerHTML = ""; } else{ //The user is not following back icon.className += " chrome red big"; icon.innerHTML = ""; } } else if(xhr.status == 400){ //The blog in question is a side-blog, and therefore cannot follow back. icon.className += " chrome big viewhide"; icon.innerHTML = ""; } else{ //If the response is anything other than OK. console.log("DashPlus Follow Back: Error fetching follow-back status."); console.log(xhr); } followerDiv.querySelector('.info').insertAdjacentHTML('afterend',icon.outerHTML); } xhr.send(); } } } }); } run();