注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
//from http://meta.wikimedia.org/wiki/MediaWiki:Gadget-markblocked.js //  document.cookie = 'mbNamespaces=; expires=Thu, 01 Jan 1970 00:00:01 GMT';  function markBlocked() {    if (!window.mbTempStyle)     mbTempStyle = 'opacity: 0.7; text-decoration: line-through'   if (!window.mbIndefStyle)     mbIndefStyle = 'opacity: 0.4; font-style: italic; text-decoration: line-through'   if (!window.mbTipBoxStyle)     mbTipBoxStyle = 'font-size:smaller; background:#FFFFF0; ' +                     'border:1px solid #FEA; padding:0 0.3em; color:#AAA'   if (!window.mbTooltip) {     i18n = {       'en': '(blocked by $2 with an expiry time of $1: $3)',       'zh': '(由$2封禁至$1: $3)',       'zh-hans': '(由$2封禁至$1: $3)',       'zh-hant': '(由$2封禁至$1: $3)'     }     mbTooltip = i18n[mw.config.get('wgUserLanguage')] || i18n.zh   }   if (!window.mbInfinity) {     i18n = {       'en': 'infinity',       'zh': '无限期',       'zh-hans': '无限期',       'zh-hant': '無限期'     }     mbInfinity = i18n[mw.config.get('wgUserLanguage')] || i18n.zh   }    mw.util.addCSS('.user-blocked-temp    {' + mbTempStyle   + '}\n' +             '.user-blocked-indef   {' + mbIndefStyle  + '}\n' +             '.user-blocked-tipbox  {' + mbTipBoxStyle + '}')   function apiRequest(params, callback) {     var aj = new XMLHttpRequest()     aj.onreadystatechange = function() {       if (aj.readyState != 4 || aj.status != 200) return         callback(eval('(' + aj.responseText + ')'))     }     aj.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&' + params, true)     aj.send('')   }      var users = []   var userLinks = []    function checkLinks(namespaces) {     function target(link) {       ap = mw.config.get('wgArticlePath').replace('$1', '')       if (link.href.replace(window.location.protocol + mw.config.get('wgServer'), '').match(/^https?:/)) return ''         // elimnating the decodeURIComponent() error on non-UTF links       if (link.href.replace(window.location.protocol + mw.config.get('wgServer'), '').substr(0, ap.length) == ap)  // .wikipedia.org/wiki/...         return decodeURIComponent(link.href.replace(window.location.protocol + mw.config.get('wgServer'), '').substr(ap.length)).replace(/_/g, ' ') + (link.href.match(/#/) ? '#...' : '')                           // that's risky, but we can't bypass IE6's bugs another way...                           // "thanks" Tim Starling if it breaks eventually :(       else // .wikipedia.org/w/index.php?title=...         return decodeURIComponent(link.href.replace(mw.config.get('wgScript'), '')                                            .replace(/.*[?&]title=(.*?)&[^#]*/, '$1')                                            .replace(/_/g, ' '))     }          var content = document.getElementById('content') ||                   document.getElementById('mw_content') ||                   document.body     var links = content.getElementsByTagName('a')            var ns = namespaces.query.namespaces     var ca     for (var i = 0; i < namespaces.query.specialpagealiases.length; i++) {       if (namespaces.query.specialpagealiases[i].realname == 'Contributions')         ca = namespaces.query.specialpagealiases[i].aliases     }          if (!namespaces.fromcookie) {       document.cookie = 'mbNamespaces2='             + encodeURIComponent([ns[-1]['*'], ns[2]['*'], ns[3]['*'], ca.join('|')].join(':'))             + '; expires=' + (new Date((new Date).getTime() + Math.exp(20))).toGMTString()     }          //   User:   User_talk:   Special:Contributions/   in canonical form, as they are in hrefs     var isUser = new RegExp('^((' + ns[2]['*'] + '|' + ns[3]['*'] + '):|' + ns[-1]['*'] +                                    ':(' + ca.join('|').replace(/_/g, ' ') + ')\\/)([^\\/#]*)$')     var j = 0     for (i = 0; i < links.length; i++) {       if (target(links[i]).match(isUser)) {         users[j++] = target(links[i]).replace(isUser, '$4')         userLinks[j-1] = links[i]         links[i].style.opacity = window.mbLoadingOpacity || 0.85 // a way to mark that the data is loading       }     }     if (j == 0) return // nobody to mark      var query = ''          // performing sort and duplicate cleanup, otherwise we risk of some users being marked twice     var usersTemp = users.join('|').split('|')         usersTemp.sort()     var u = []         u[0] = usersTemp[0]     if (usersTemp[1]) {       j = 1       for (i = 1; i < usersTemp.length; i++) {         if (usersTemp[i] != usersTemp[i-1])           u[j++] = usersTemp[i]       }     }          for (i = 0; i < u.length; i++) {       if (query.length > 1666 || query.length - query.replace(/\|/g, '').length >= 49) { // splitting the URL into small parts when needed          apiRequest('action=query&list=blocks&bklimit=500&bkusers=' + query, markLinks)         query = ''       }       query += (query ? '|' : '') + encodeURIComponent(u[i])     }     if (query) apiRequest('action=query&list=blocks&bklimit=500&bkusers=' + query, markLinks)   }      function markLinks(banlist) {     var bl = banlist.query.blocks     if (!bl) { // no bans       for (var i = 0; i < userLinks.length; i++)         userLinks[i].style.opacity = ''       return     }     var mark = []     var tips = {}     var infin = {}     var j = 0     for (var i = 0; i < bl.length; i++) {       mark[j++] = bl[i].user       tips[bl[i].user] = ' ' + mbTooltip                                .replace('$1', bl[i].expiry.replace(/(.*)T(.*)Z/, '$1 $2 UTC').replace('infinity', mbInfinity))                                .replace('$2', bl[i].by)                                .replace('$3', bl[i].reason)       infin[bl[i].user] = bl[i].expiry.substr(0, 2) == 'in'     }     var fenceOfShame = '|' + mark.join('|') + '|'     var span     for (var i = 0; i < userLinks.length; i++) {       userLinks[i].style.opacity = ''       if (fenceOfShame.indexOf('|' + users[i] + '|') > -1) {         userLinks[i].className += ' user-blocked-' + (infin[users[i]] ? 'indef' : 'temp')         if (window.mbTipBox) {           span = document.createElement('span')           span.title = users[i] + tips[users[i]]           span.className = 'user-blocked-tipbox'           span.innerHTML = '#'           userLinks[i].parentNode.insertBefore(span, userLinks[i])         } else           userLinks[i].title += tips[users[i]]       }     }   }      if (ca = document.getElementById('ca-showblocks'))     ca.parentNode.removeChild(ca)      var cookie = document.cookie.match(/mbNamespaces2=(.*?);/)   if (cookie) {     cookie = decodeURIComponent(cookie[1]).split(':')     checkLinks({       'query': {         'namespaces': { '-1': { '*': cookie[0] }, '2': { '*': cookie[1] }, '3': { '*': cookie[2] } },         'specialpagealiases': [{'realname': 'Contributions', 'aliases': cookie[3].split('|')}]       },       'fromcookie': 1     })   } else {     apiRequest('action=query&meta=siteinfo&siprop=namespaces|specialpagealiases', checkLinks)   } }  if (mw.config.get('wgAction') != 'edit') {   if (window.mbNoAutoStart) {     f = function(){       mw.util.addPortletLink('p-cactions', 'javascript:markBlocked()', 'XX', 'ca-showblocks')     }   } else {     f = markBlocked   }   $(f) }