Faire exploser StackOverflow (bookmarklet) [fermé]

28

Parfois, les gens sont frustrés sur le réseau StackExchange (en particulier SO).

logo stackoverflow modifié

Votre tâche consiste à créer un bookmarklet qui fait exploser / imploser / détruire StackOverflow d'une manière ou d'une autre. Cela fournira une meilleure façon de disperser nos frustrations.

Les règles:

  • il doit prendre la forme d'un bookmarklet
  • doit fonctionner dans Chrome et Firefox (dernière version stable)
  • jQuery est sur le site, vous pouvez donc l'utiliser
  • pas de création d'une balise de script qui tire explosionThisPage.js ou similaire

La notation est le nombre de caractères qui doivent être copiés et collés, sauf:

  • -1 si vous incluez une explication
  • -5 pour chaque vote positif
  • -10 si vous n'utilisez pas jQuery
  • -10 s'il fait un bruit d'explosion
  • + 9e72 s'il endommage réellement le site (F5 devrait réparer les dégâts)

Si le gif vous distrait, supprimez-le.

Brigand
la source
7
OMI, la spécification n'est pas assez précise pour permettre une détermination objective de la conformité d'une soumission.
Peter Taylor
dans un commentaire, car ce n'est pas le mien: javascript: varwww_WHAK_com = 'http://www.is-a-jerk.com/flash/url.asp?flash=10&insult=off&destroy=' + encodeURIComponent(top.location.href.replace('http://', '').replace('https://', '')); top.location.href = www_WHAK_com; void(0);
SeanC
1
Mon commentaire ne concernait pas le système de notation mais la spécification de la tâche.
Peter Taylor
4
Vraiment? Cela devrait être des points négatifs 9*10**72 s'il parvient à endommager le site, puis à le réparer lorsque l'utilisateur recharge la page. Ce serait tout un exploit.
Blacklight Shining
2
@FakeRainBrigand IMO, causant un préjudice réel au site qui est en quelque sorte réparé lors du rechargement est beaucoup plus impressionnant que de simplement causer un préjudice au site.
Blacklight Shining

Réponses:

27

Poulet!

Score: 46-1 (explication) - 5 * 17 (votes) = -40

javascript:$('*:not(:has(*))').text('chicken')

Il prend simplement chaque élément sans enfant et le remplace par le texte 'chicken'.

Exemples de captures d'écran:
plus de poulet
cette question pouletifiée

image

Poignée de porte
la source
Idée géniale :-) Il est également intéressant de voir des choses comme "répondu au poulet" ou le titre de la page, qui ont des mots non-poulet ... Pourquoi?
Brigand
@FakeRainBrigand Huh? Le titre de la page devient "poulet" pour moi ...
Poignée de porte
Version plus longue mais plus approfondie, basée en partie sur mon entrée:javascript:void($(':not(iframe,script,style)').contents().each(function(){if(this.nodeType==3)this.nodeValue=this.nodeValue.replace(/\w+/g,'chicken')}))
Ilmari Karonen
@ Doorknob, félicitations, vous aviez un score de 15, ce qui était le plus bas (désolé, il m'a fallu si longtemps pour en accepter un). Si je pouvais recommencer, je ferais cependant un vote de -15.
Brigand
1
Aurait dû être HODOR!
SztupY
27

Voici mon entrée, que j'appellerai l'ivrogne :

javascript:void(setInterval(function(){c='1234567890poiuytrewqasdfghjklmnbvcxzZXCVBNMLKJHGFDSAQWERTYUIOP=)(/&%25$%23"!1';$(':not(iframe,script,style)').contents().each(function(){if(this.nodeType==3&&/\S/.test(this.nodeValue)){a=this.nodeValue.split('');x=0;for(i=0;i<a.length;i++){r=Math.random()*9999;if(r<10){x=1;j=c.indexOf(a[i]);a[i]=(r<4%3F(t=a[i-1],a[i-1]=a[i],t):r<5%3F'':r<6%3Fa[i]+a[i]:j<0%3Fa[i]:c.charAt(j+(r<8%3F1:-1)))}}if(x)this.nodeValue=a.join('')}})},100))

À 474 caractères, cela ne gagnera probablement pas de prix de golf, mais j'espère compenser cela dans les votes positifs. :)

Voici le même code désobscurci:

setInterval(function () {
  var c = '1234567890poiuytrewqasdfghjklmnbvcxzZXCVBNMLKJHGFDSAQWERTYUIOP=)(/&%$#"!1';
  $(':not(iframe,script,style)').contents().each(function () {
    if (this.nodeType==3 && /\S/.test(this.nodeValue)) {
      var a = this.nodeValue.split('');
      var x = 0;
      for (i = 0; i < a.length; i++) {
        r = Math.random() * 9999;
        if (r < 10) {
          x = 1;
          j = c.indexOf(a[i]);
          a[i] = ( r < 4 ? (t = a[i-1], a[i-1] = a[i], t)
                 : r < 5 ? ''
                 : r < 6 ? a[i] + a[i]
                 : j < 0 ? a[i] : c.charAt(j + (r < 8 ? 1 : -1)) ); 
        }
      }
      if (x) this.nodeValue = a.join('');
    }
  });
}, 100);

Ce qu'il fait, c'est muter aléatoirement le texte sur la page, permuter des caractères adjacents, supprimer ou dupliquer des caractères ou les remplacer par ceux qui leur sont adjacents sur le clavier. L'effet est plutôt subtil au début, mais laissez-le fonctionner pendant un certain temps, et le contenu de la page se détériorera inévitablement en un désordre de frappe ivre:

Rentre chez toi, donc, tu es ivre!

Ps. Le code n'est en aucun cas spécifique à SO, il fonctionnera donc sur n'importe quel site Web qui utilise jQuery. Essayez-le sur Wikipedia pour des résultats hilarants. L'idée est basée sur quelque chose que j'ai écrit il y a des années comme une interprétation créative du défi "99 bouteilles de bière": ma version a introduit un nombre croissant de fautes de frappe dans chaque verset, jusqu'à ce que les derniers soient presque méconnaissables. Si quelqu'un veut le voir, voici le code Perl d'origine .

Ilmari Karonen
la source
6
Plus lide the Dyslexinator (sorru, je suis en train de taper pendant qu'il ruqning)
TheDoctor
16

Je ne sais pas pourquoi cela a été rejeté, j'aime ça :)

Ce n'est pas le plus court, mais je pense que c'est joli:

133 caractères -1

javascript:(function(){setInterval(function(){$("div, span").eq(Math.round(Math.random()*$("div, span").length)).hide(500)},90)}());

Non golfé:

javascript:(function(){  
         window.setInterval(function() {
                 i = Math.round(Math.random() * $("div, span").length);
                 $("div, span").eq(i).hide("slow");
         } , 90);
}());

Explication: J'espère que cela compte, ce script implose le site au lieu de l'exploser;) Cela choisit simplement un div aléatoire ou une durée toutes les 90 ms et le ferme lentement ..

Fels
la source
+1 mais le random () n'est pas efficace pour une destruction complète et contrôlée, de toute façon j'aime ça :)
Daniele Brugnara
Il suffit de le jeter dans la fenêtre URL et rien ne s'est passé ,,,?
WallyWest
Désolé Wally, vous n'avez pas vu votre commentaire. Vous devez l'enregistrer en tant que signet.
Fels
12

Parce qu'il n'a pas été défini si le score supérieur ou inférieur l'emporte ...

javascript:$(".vote-down-off").click()

Base: 38
Bonis:

  • + 9e72 dégâts permanents.

Score final: 9000000000000000000000000000000000000000000000000000000000000000000000038

Btw, je ne l'ai pas essayé.

Johannes Kuhn
la source
1
haha Au fait, si vous demandez JavaScript: 9e72+38 === 9e72:-)
Brigand
3
Qui demande javascript? Utilisez jQuery .
Johannes Kuhn
16
i.stack.imgur.com/sGhaO.gif : D
Poignée de porte
4
Euh ... devrais-je voter contre ou contre ...?
Ami de Kim
1
Oh, je comprends ... il clique sur les boutons avec la classe "vote-down-off" si vous l'utilisez. C'est un code-challenge tagged, ce qui implique que le score le plus bas l'emporte.
Nzall
8

Mon objectif 245 caractères.

Surtout pas le plus court, mais j'aime ça ;-)

javascript:document.body.innerHTML+='<img%20id="bigMsk"%20src="http://i.stack.imgur.com/VWPZg.gif">';document.getElementById('bigMsk').setAttribute('style','z-index:1;opacity:.6;display:block;position:fixed;top:0;left:0;width:100%;height:100%;');

-1: Explication:

  • J'utilise la belle image gif animée offerte à partir de la question,
  • Avec l'aide de CSS, je les ai mis sur la page en pleine page, avec une opacité de 60%.

:

document.body.innerHTML+=
   '<img%20id="bigMsk"%20src="http://i.stack.imgur.com/VWPZg.gif">';
document.getElementById('bigMsk').setAttribute('style',
    'z-index:1;
     opacity:.6;
     display:block;
     position:fixed;
     top:0;
     left:0;
     width:100%;
     height:100%;
');

Principalement lisible par lui-même ;-)

-10 Pas de JQuery

Alternative:

Il existe une alternative:

javascript:document.body.innerHTML+='<img%20id="bigMsk"%20src="http://i.stack.imgur.com/aTtWM.gif">';document.getElementById('bigMsk').setAttribute('style','z-index:1;opacity:.6;display:block;position:fixed;top:0;left:0;width:100%;height:100%;');

Basé sur un GIF non modifié, trouvé sur Wikimedia Commons: Fichier: Feu animé par nevit.gif

Image: Image de Wikipedia

Échantillon:

entrez la description de l'image ici

F. Hauri
la source
C'est génial!
Brigand
5

Ok, je pense que cela devrait répondre aux critères:

javascript:document.write("<h1>Exploded</h1>")

Remplace la page actuelle par "Exploded"

Score: 46
-1 Explication
-10 Pas de requête j

35

Johannes Kuhn
la source
5

Celui-ci est agréable et provoque également un certain décalage: D

javascript:setInterval(function(){document.body.innerHTML=document.body.innerHTML.replace(/\d+/g,function(){return Math.random()*100|0});},500)

Il définit simplement un intervalle qui remplace toutes les chaînes de chiffres par un nombre aléatoire de 0 à 100. Deux fois par seconde. Cela crée un tas d'erreurs, comme vous pouvez vous y attendre, et je pourrais le corriger pour arrêter tous les 404 lorsque les URL des images sont modifiées, mais je pense que c'est plus amusant de cette façon et c'est du golf de code. :RÉ

But:

  • 132 base
  • -1 explication
  • -5 vote positif
  • -10 pas de jQuery

Note totale: 116

Poignée de porte
la source
Ne fonctionne pas dans Firefox.
Johannes Kuhn
@JohannesKuhn Que fait-il dans FF? Il fonctionne dans Chrome
Poignée de porte
Affiche une page vierge avec un numéro.
Johannes Kuhn
@JohannesKuhn Je pense que je l'ai corrigé; ne function x(){document.body.innerHTML=document.body.innerHTML.replace(/\d+/g,function(){return Math.random()*100|0})}setInterval(x,500)fonctionne pour vous maintenant?
Poignée de porte
Oui, mais un single ;à la fin ferait de même.
Johannes Kuhn
4

165 caractères (164 points)

-1 pour explication

Voici ma tentative. Ce n'est pas particulièrement court, mais c'est amusant.

javascript:r=Math.random;$("a,span,p").each(function(){var a=$(this);a.css({position:"relative"});a.delay(1E4*r()).animate({left:9E3*r()-4E3,top:9E3*r()-4E3},555)});

Il fait glisser des éléments individuels hors de la page dans des directions aléatoires. J'ai inclus spécifiquement span en raison de la coloration syntaxique (chaque couleur a une étendue distincte).

r = Math.random;
$('a,span,p').each(function () {
    var t = $(this);
    t.css({
        position: 'relative'
    });

    t.delay(r()*10000).animate({
        left: r() * 9e3 - 4e3,
        top: r() * 9e3 - 4e3
    }, 555);
});

Bien sûr, il pourrait être raccourci en supprimant certaines des balises, mais faites-moi savoir s'il existe des moyens de le raccourcir sans réduire les performances.

Brigand
la source
4

181 151 caractères - 1 (explication) - 10 (pas de jQuery) = 140 points

javascript:i=setInterval(function(){for(var a=document;0!==a.childNodes.length;)a=a.childNodes[a.childNodes.length-1];a!==document?a.parentNode.removeChild(a):clearInterval(i)},50);

Quelques caractères supplémentaires peuvent être enregistrés en omettant le function(){et en utilisant une chaîne à la place. Notez également que l'extraction des propriétés couramment utilisées, par exemple, c='childNodesnous permet de faire à la z[c]place de z.childNodes.

javascript:h=setInterval('d=z=document;c="childNodes";for(l="length";z[c][l];z=z[c][z[c][l]-1]);z!=d?z.parentNode.removeChild(z):clearInterval(h)',50);

Je suppose que je pourrais faire moins de points en utilisant jQuery et en ne traversant pas les propriétés, mais bon.

Non golfé:

var intervalHandle = setInterval(function() {
    var lastElement = document;
    //get last element
    while (lastElement.childNodes.length !== 0) {
        lastElement = lastElement.childNodes[lastElement.childNodes.length - 1];
    }

    if(lastElement !== document) {
        lastElement.parentNode.removeChild(lastElement);
    } else {
        clearInterval(intervalHandle);
    }
}, 50);

Fondamentalement, cela trouve le dernier élément DOM sur la page et le supprime. Ensuite, continue de le faire toutes les 50 millisecondes, ce qui, selon moi, est une vitesse moyenne agréable pour voir une page se déchirer de fond en comble. C'est thérapeutique, je le jure.

Avertissement: je l'avais fait il y a quelque temps et j'ai décidé de le partager, car cela semble approprié ici. La source se trouve dans mon référentiel GitHub .

Alpha
la source
C'est bien! Je l'ai édité pour inclure une version plus golfique qui enregistre quelques caractères. J'espère que ça ne vous dérange pas. Il est fonctionnellement identique.
Brigand
@FakeRainBrigand Pas du tout, merci! En fait, vous m'avez aidé à apprendre de nouveaux trucs sympas, ce qui était mon intention initiale en l'écrivant. Merci encore!
Alpha
3

Javascript, 281

javascript:$('body').html().split('<code>javascript:').forEach(function (a) {if (a.indexOf("location")*a.indexOf("write")*a.indexOf("noscript")==-1) try{exec(a.split("</code>")[0].replace(/&#(\d+)/g, function(match, dec) {return String.fromCharCode(dec);}))} catch (e) {}});void 0;

Il obtient chaque réponse à la question sous la forme <code>javascript:(stuff)</code>qui ne change pas l'emplacement et les exécute toutes.

Kuilin Li
la source
Hmm ... Je peux voir beaucoup d'espaces qui semblent être amovibles. Vous devriez peut-être le supprimer.
John Dvorak
3
Je suis à peu près sûr que cela ne respecte pas la règle: "pas de création d'une balise de script qui tire explosionThisPage.js ou similaire". De plus, cela ne fonctionne pas sur toutes les pages SO, juste celle-ci. De plus, cela fait vraiment du tort aux questions concernant XSS, vous devez donc ajouter 9e72 à votre score.
John Dvorak
2

J'aime cet effet. Il bascule essentiellement un effet de diapositive pour chaque div sur le site toutes les 1 millisecondes.

javascript:setInterval(function(){$('div').toggle()},1)

But

56
-1 Explanation
--------------
55 Total
Dan Grahn
la source
Sympa, mais juste Google fonctionnerait aussi: javascript:setInterval(function(){$('div').toggle(88)},1)
Fels