Make StackOverflow Explode (bookmarklet) [zamknięte]

28

Czasami ludzie są sfrustrowani w sieci StackExchange (w szczególności SO).

zmodyfikowano logo stackoverflow

Twoim zadaniem jest utworzenie bookmarkletu, który powoduje, że StackOverflow w jakiś sposób eksploduje / imploduje / niszczy. Zapewni to lepszy sposób na rozproszenie naszych frustracji.

Zasady:

  • musi być w formie bookmarkletu
  • musi działać w Chrome i Firefox (najnowsza stabilna)
  • jQuery jest na stronie, więc możesz z niego korzystać
  • bez tworzenia znacznika skryptowego, który ściąga ExplosThisPage.js lub podobny

Punktacja to liczba znaków, które należy skopiować i wkleić, z wyjątkiem:

  • -1, jeśli podasz wyjaśnienie
  • -5 za każde głosowanie
  • -10, jeśli nie używasz jQuery
  • -10, jeśli wyda dźwięk wybuchu
  • + 9e72, jeśli faktycznie wyrządza szkodę stronie (F5 powinien naprawić obrażenia)

Jeśli gif rozprasza, usuń go.

Bandyta
źródło
7
IMO specyfikacja nie jest wystarczająco ostra, aby obiektywnie ustalić, czy zgłoszenie ją spełnia.
Peter Taylor,
w komentarzu, ponieważ nie jest mój: 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
Mój komentarz nie dotyczył systemu punktacji, ale specyfikacji zadania.
Peter Taylor,
4
Naprawdę? To powinno być minus 9*10**72 punkty, jeśli rzeczywiście uda się wyrządzić szkodę stronie, a następnie naprawić ją, gdy użytkownik przeładuje stronę. To byłby niezły wyczyn.
Blacklight Shining
2
@FakeRainBrigand IMO, powodowanie prawdziwej szkody w witrynie, która jest w jakiś sposób naprawiona po przeładowaniu, jest znacznie bardziej imponujące niż zwykłe powodowanie szkody w witrynie.
Blacklight Shining

Odpowiedzi:

27

Kurczak!

Wynik: 46 - 1 (wyjaśnienie) - 5 * 17 (głosów) = -40

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

Po prostu bierze każdy element bez dzieci i zastępuje go tekstem 'chicken'.

Przykładowe zrzuty ekranu:
więcej kurczaków
to pytanie zostało uogólnione

obraz

Klamka
źródło
Niesamowity pomysł :-) Interesujące jest również zobaczenie takich rzeczy jak „kurczak z odpowiedzią” lub tytuł strony, które zawierają słowa inne niż kurczak ... Dlaczego?
Brigand
@FakeRainBrigand Huh? Tytuł strony staje się dla mnie „kurczakiem” ...
Klamka
Dłuższa, ale dokładniejsza wersja, częściowo oparta na moim wpisie:javascript:void($(':not(iframe,script,style)').contents().each(function(){if(this.nodeType==3)this.nodeValue=this.nodeValue.replace(/\w+/g,'chicken')}))
Ilmari Karonen,
@Doorknob, gratulacje, miałeś wynik 15, który był najniższy (przepraszam, że tak długo zajęło mi zaakceptowanie jednego). Gdybym jednak mógł to zrobić od nowa, oddałbym głos na wartość -15.
Brigand
1
Powinien być HODOR!
Sztuczki
27

Oto mój wpis, który nazywam pijakiem :

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))

Przy 474 znakach prawdopodobnie nie wygra żadnych nagród golfowych, ale mam nadzieję, że nadrobię to w pozytywnych opiniach. :)

Oto ten sam kod pozbawiony zaciemnienia:

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);

To, co robi, to losowo mutuje tekst na stronie, zamieniając sąsiadujące znaki, usuwając lub powielając znaki lub zastępując je znakami sąsiadującymi na klawiaturze. Na początku efekt jest subtelny, ale pozostawia go na jakiś czas, a zawartość strony nieuchronnie rozpadnie się na bałagan pijanego pisania:

Idź do domu, więc jesteś pijany!

Ps. Kod nie jest w żaden sposób specyficzny dla SO, więc będzie działał na każdej stronie internetowej, która korzysta z jQuery. Wypróbuj to na Wikipedii, aby uzyskać zabawne wyniki. Pomysł opiera się na czymś, co napisałem lata temu, jako twórczej interpretacji wyzwania „99 butelek piwa”: moja wersja wprowadzała powoli rosnącą liczbę literówek do każdego wersetu, aż do momentu, gdy ostatnie były prawie nie do poznania. Jeśli ktoś chce to zobaczyć, oto oryginalny kod Perla .

Ilmari Karonen
źródło
6
Więcej informacji o Dysleksynatorze (sorru, piszę, gdy jest zrujnowany)
TheDoctor
16

Nie wiem, dlaczego to zostało przegłosowane, podoba mi się :)

To nie jest najkrótszy, ale myślę, że jest ładny:

133 znaki -1

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

Nie golfowany:

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

Objaśnienie: Mam nadzieję, że to się liczy, ten skrypt wszczepia witrynę zamiast eksplodować;) To po prostu wybiera losowy div lub przedział co 90ms i zamyka go powoli ..

Fels
źródło
+1, ale random () nie jest skuteczny do pełnego i kontrolowanego niszczenia, tak czy inaczej mi się podoba :)
Daniele Brugnara,
Po prostu wrzuciłem to do okna URL i nic się nie stało ,,,?
WallyWest,
Przepraszamy, Wally, nie widziałem Twojego komentarza. Musisz zapisać go jako zakładkę.
Fels
12

Ponieważ nie określono, czy wyższy lub niższy wynik wygrywa ...

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

Baza: 38
Bonusy:

  • + 9e72 Trwałe obrażenia.

Wynik końcowy: 90000000000000000000000000000000000000000000000000000000000000000000038

Przy okazji, nie próbowałem tego.

Johannes Kuhn
źródło
1
haha Przy okazji, jeśli zapytasz JavaScript: 9e72+38 === 9e72:-)
Brigand
3
Kto pyta o javascript? Użyj jQuery .
Johannes Kuhn,
4
Err ... czy powinienem głosować w dół czy w górę ...?
Przyjaciel Kim
1
Och, rozumiem ... klika przyciski z klasą „głosuj w dół-wyłącz”, jeśli go używasz. Jest oznaczony kodem-wyzwanie, co oznacza, że ​​wygrywa najniższy wynik.
Nzall
8

Mój pupose 245 znaków.

Przeważnie nie krótszy, ale mi się podoba ;-)

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: Objaśnienie:

  • Używam ładnego oferowanego animowanego obrazu gif z pytania,
  • Za pomocą CSS umieszczam je na całej stronie z kryciem 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%;
');

Sam w większości czytelny ;-)

-10 Brak JQuery

Alternatywny:

Istnieje alternatywa:

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%;');

Na podstawie niemodyfikowanego GIF, znalezionego na Wikimedia Commons: Plik: Animated fire autor: nevit.gif

Obraz: Zdjęcie z Wikipedii

Próba:

wprowadź opis zdjęcia tutaj

F. Hauri
źródło
To cudownie!
Brigand
5

Ok, myślę, że to powinno spełniać kryteria:

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

Zamienia bieżącą stronę na „Rozłożony”

Wynik: 46
-1 Wyjaśnienie
-10 Brak jQuery

35

Johannes Kuhn
źródło
5

Ten jest przyjemny i powoduje również sporo opóźnień: D

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

Po prostu ustawia interwał, który zastępuje wszystkie ciągi cyfr losową liczbą od 0 do 100. Dwa razy na sekundę. Powoduje to wiele błędów, jak można się spodziewać, i mógłbym to naprawić, aby zatrzymać wszystkie 404 po zmianie adresów URL obrazów, ale myślę, że w ten sposób jest fajniej i jest to golf golfowy. :RE

Wynik:

  • 132 baza
  • -1 wyjaśnienie
  • -5 głosowanie za nami
  • -10 brak jQuery

Łączny wynik: 116

Klamka
źródło
Nie działa w Firefoksie.
Johannes Kuhn,
@JohannesKuhn Co robi w FF? Działa w Chrome
Klamka
Wyświetla pustą stronę z numerem.
Johannes Kuhn,
@JohannesKuhn Myślę, że to naprawiłem; będzie function x(){document.body.innerHTML=document.body.innerHTML.replace(/\d+/g,function(){return Math.random()*100|0})}setInterval(x,500)pracować dla ciebie?
Klamka
Tak, ale singiel ;na końcu zrobiłby to samo.
Johannes Kuhn,
4

165 znaków (164 punkty)

-1 dla wyjaśnienia

Oto moja próba. Nie jest szczególnie krótki, ale jest fajny.

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)});

Zsuwa poszczególne elementy ze strony w losowych kierunkach. W szczególności zawarłem zakres ze względu na podświetlanie składni (każdy kolor ma osobny zakres).

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);
});

Oczywiście można go skrócić, usuwając niektóre tagi, ale daj mi znać, czy istnieją sposoby na jego skrócenie bez zmniejszania wydajności.

Bandyta
źródło
4

181 151 znaków - 1 (wyjaśnienie) - 10 (brak jQuery) = 140 punktów

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);

Kilka dodatkowych znaków można zapisać, pomijając function(){i używając zamiast tego łańcucha. Zwróć też uwagę na ekstrakcję powszechnie używanych właściwości, np. c='childNodesPozwala nam to zrobić z[c]zamiast 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);

Chyba mógłbym zdobyć mniej punktów, używając jQuery i nie przechodząc przez właściwości, ale no cóż.

Nie golfowany:

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);

Zasadniczo znajduje to najnowszy element DOM na stronie i usuwa go. Następnie robi to co każde 50 milisekund, co według mnie jest dość przeciętną szybkością, aby zobaczyć, jak strona jest odrywana od podstaw. To terapeutyczne, przysięgam.

Oświadczenie: Zrobiłem to jakiś czas temu i postanowiłem się tym podzielić, ponieważ wydaje się to właściwe tutaj. Źródło znajduje się w moim repozytorium GitHub .

Alfa
źródło
To jest świetne! Zredagowałem go, aby uwzględnić wersję bardziej golfową, która oszczędza kilka postaci. Mam nadzieję, że nie masz nic przeciwko. Jest funkcjonalnie identyczny.
Brigand
@FakeRainBrigand W ogóle nie, dziękuję! W rzeczywistości pomogłeś mi nauczyć się nowych fajnych sztuczek, co było moją pierwotną intencją podczas pisania. Dzięki jeszcze raz!
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;

Otrzymuje każdą odpowiedź na pytanie w formie <code>javascript:(stuff)</code>, która nie zmienia lokalizacji i uruchamia je wszystkie.

Kuilin Li
źródło
Hmm ... Widzę wiele białych znaków, które wydają się być usuwalne. Być może powinieneś to usunąć.
John Dvorak,
3
Jestem prawie pewien, że to nie powiedzie się reguła: „brak tworzenia znacznika skryptu, który ściąga wybuchThisPage.js lub podobny”. Ponadto nie działa na każdej stronie SO, tylko na tej stronie. Ponadto zadaje prawdziwe obrażenia w pytaniach dotyczących XSS, dlatego powinieneś dodać 9e72 do swojego wyniku.
John Dvorak,
2

Podoba mi się ten efekt. Zasadniczo przełącza efekt slajdu dla każdego elementu div w witrynie co 1 milisekundę.

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

Wynik

56
-1 Explanation
--------------
55 Total
Dan Grahn
źródło
Fajnie, ale tylko Google też by działało: javascript:setInterval(function(){$('div').toggle(88)},1)
Fels