MozillaPL.org - polskie centrum Mozilli

Główne menu:

Przydatne skryptozakładki

Projektowanie aplikacji i rozszerzeń opartych na technologiach Mozilla Foundation: XUL, JavaScript, XPCOM, XBL i innych

Moderator: Pomocy?!

Przydatne skryptozakładki

Postautor: Mirek » 16 sierpnia 2007, 20:54

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

Skryptozakładki

pl.wikipedia.org pisze:Skryptozakładka (ang. bookmarklet, favlet, favelet) jest to niewielki skrypt napisany w języku JavaScript przechowywany jako adres URL zakładki w przeglądarce internetowej lub jako adres odsyłacza na stronie internetowej. Skrypt ten uruchamiany jest w momencie kliknięcia takiej specjalnej zakładki.

Skryptozakładki rozszerzają standardowe możliwości przeglądarki, podobnie jak rozszerzenia, ale w przeciwieństwie do nich nie korzystają z podwyższonych przywilejów uruchamiania kodu JavaScript — kontekstem wykonania skryptozakładki jest oglądana właśnie strona www, dzięki czemu używanie bookmarkletów jest w pełni bezpieczne (czego nie można powiedzieć o rozszerzeniach).

Za pomocą skryptozakładek można na przykład:

* Modyfikować sposób wyświetlania strony przez przeglądarkę (zmiana rozmiaru czcionki, koloru tła, itp.)
* Wydobywać dane ze strony (np. odsyłacze, obrazki, tekst)
* Uruchamiać wyszukiwarkę, pobierając zapytanie od użytkownika lub bezpośrednio ze strony
* Zgłaszać stronę do serwisu walidującego

Najciekawsze kolekcje skryptozakładek

* Squarefree (Jesse Ruderman)
* Centricle (Kevin Smith)
* Slayeroffice (Steven Chipman)
* Subsimple (Troels Jakobsen)
* Opera Wiki

* http://en.wikipedia.org/wiki/User:JesseW/BookmarkletsUniversal
* http://www.google.pl/search?hl=pl&q=skryptozak%C5%82adka%7Cbookmarklet%7Cfavlet%7Cfavelet

Ostrzeżenie
Jak ostatnio odkryłem, dzięki skryptozakładkom można także edytować ustawienia (te z about:config), więc przy dodawaniu (zwłaszcza z niepewnych źródeł, podejrzanych stron) należy zachować ostrożność.
Także jeśli ktoś wykorzysta je np. do zapamiętywania haseł, bądź innych poufnych danych musi uważać, by (skrypto)zakładki nie wpadły w niepowołane ręce. Jeśli wewnątrz skryptu występują jakieś adresy internetowe może to oznaczać, że skrypt próbuje wysłać tam twoje prywatne dane, więc właściwie wypadałoby przyjrzeć się każdej skryptozakładce.


Skryptozakładki działają w większości przeglądarek, przy czym w IE6 jest ograniczenie do 508 znaków i trzeba tam stosować sztuczkę, polegającą na wykonywaniu skryptu zapisanego w pliku *.js. w IE7 i w IE 5.5- limit ten jest/był większy.

"Instalacja" i używanie skryptozakładek

Możemy zrobić to na kilka sposobów...
Dodam tylko, że ja trzymam je w folderze "Bookmarklets" na pasku zakładek osobistych (pod paskiem nawigacyjnym). A ostatnio zacząłem tworzyć podfoldery segregujące je pod względem funkcjonalności (np. Wyszukiwanie, Słowniki, Narzędzia phpBB, itd.)

1. Zapisywanie ze stron (gł. poświeconym bookmarkletom)
W takim przypadku bookmarklety są zazwyczaj zamieszczane jako zwykłe linki, co w kodzie HTML wygląda np. tak.:
Kod: Zaznacz cały
<a href="javascript:alert('Test');">Test</a>

Klikamy wtedy na nim prawym przyciskiem i z menu kontekstowego wybieramy "Dodaj odnośnik do zakładek". Później w celu wykonania kodu wystarczy "otworzyć" zakładkę.

2. Można też w odpowiednim folderze zakładek wybrać z menu kontekstowego "Dodaj zakładkę..." i wpisać nazwę, a w pole adresu wkleić/wpisać odpowiedni kod i ewentualnie dodać komentarz, słowo kluczowe.

3. Skryptozakładki można też trzymać w osobnym pliku, albo w jakimś rozszerzeniu do robienia notatek w przeglądarce lub np. na przygotowanej specjalnie stronie zawierającej nasze najczęściej używane skryptozakładki - wtedy aby je wykonać wklejamy kod w pole adresu i naciskamy Enter.

Tworzenie skryptozakładek

Osobiście - w zależności od długości kodu - tworzę je albo od razu w pasku adresu, albo w jakimś edytorze tekstowym lub nawet polu tekstowym a następnie "zwijam" do jednej linii (można to też zrobić skryptem).
Pomocna może być stronka specjalnie przystosowana do tego zadania:
http://spruce.flint.umich.edu/~jalarie/jaa_kcd2.htm
a jeśli ktoś lubi kolorowanie składni, to może zintegrować sobie odpowiednie skrypty np. stąd:
http://marijn.haverbeke.nl/highlight/index.html lub pogooglać za:
javascript syntax highlighting
Oczywiście wskazana jest znajomość JS i modelu DOM
Można także skorzystać z rozszerzeń Greasemonkey lub Chickenfoot - przy czym nie wszystko w nich działa - np. "kropkowe" odwołanie do opcji "ankiety" w stylu: form1.select_option.options[j].value


Tyle teorii, teraz przejdźmy do wrzucania naszych skryptozakładek z opisem działania.

Jeśli któraś z poniższych nie działa, to proszę dać znać - oznacza to pewnie błąd przy przepisywaniu - ponieważ by nie rozwalić layoutu forum do niektórych bookmarkletów musiałem dodać trochę spacji.
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Mirek » 16 sierpnia 2007, 20:54

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

Uniwersalne (niezwiązane z konkretną stroną)

Pierwsze pole tekstowe
Kod: Zaznacz cały
javascript:(function(){  df=document.forms;  for(i=0;i<df.length;++i)  {     x=df[i];    for(j=0;j<x.length;++j)    {      y=x[j];      if(y.type == 'text' || y.type == 'password')      {        y.focus();        y.select();        return;      }    }  }})();

Przechodzi do pierwszego pola tekstowego na stronie i ew. zaznacza jego zawartość. Dla amatorów obsługi z klawiatury polecam przypisanie tej zakładki pod literkę 'L' - wtedy żeby przejść do pierwszego pola tekstowego wciskamy tylko [CTRL]+[L] (=pole adresu), [L] i [Enter]. Niestety nie działa na stronach opartych o ramki - stworzyłem nawet odpowiednią wersję, ale z niewiadomych mi przyczyn nie chce działać polecenie focus() - np. na stronie nautilus.org.pl
alert(frames[2].document.forms[0][0].type) działa i wyświetla 'text'
a frames[2].document.forms[0][0].focus(); - już nie robi niczego.

Zwiększ URL o jeden
Kod: Zaznacz cały
javascript:(function(){ var e,s; IB=1; function isDigit(c) { return (%220%22 <= c && c <= %229%22) } L = location.href; LL = L.length; for (e=LL-1; e>=0; --e) if (isDigit(L.charAt(e))) { for(s=e-1; s>=0; --s) if (!isDigit(L.charAt(s))) break; break; } ++s; if (e<0) return; oldNum = L.substring(s,e+1); newNum = %22%22 + (parseInt(oldNum,10) + IB); while (newNum.length < oldNum.length) newNum = %220%22 + newNum; location.href = L.substring(0,s) + newNum + L.slice(e+1); })();

Zwiększa o jeden ostatnią liczbę w adresie URL (zazwyczaj chodzi o przejście do następnej strony) i przechodzi pod ten nowy adres.

Zmniejsz URL o jeden
Kod: Zaznacz cały
javascript:(function(){ var e,s; IB=-1; function isDigit(c) { return (%220%22 <= c && c <= %229%22) } L = location.href; LL = L.length; for (e=LL-1; e>=0; --e) if (isDigit(L.charAt(e))) { for(s=e-1; s>=0; --s) if (!isDigit(L.charAt(s))) break; break; } ++s; if (e<0) return; oldNum = L.substring(s,e+1); newNum = %22%22 + (parseInt(oldNum,10) + IB); while (newNum.length < oldNum.length) newNum = %220%22 + newNum; location.href = L.substring(0,s) + newNum + L.slice(e+1); })();

Jak poprzedni - tylko zmniejsza o jeden.

Pokaż hasła formularzy
Kod: Zaznacz cały
javascript:janbm_showpass:var a = document.getElementsByTagName('input'); for (var i = 0; i < a.length; i++) { if (a[i].hasAttribute('type') && a[i].type === 'password') a[i].type = 'text'; } void 0

Zamienia gwiazdeczki na zwykły tekst.

Zamiana metody POST na GET
Kod: Zaznacz cały
javascript:(function(){var x,i; x = document.forms; for (i = 0; i < x.length; ++i) x[i].method=%22get%22; alert(%22Changed %22 + x.length + %22 forms to use the GET method.  After submitting a form from this page, you should be able to bookmark the result.%22); })();

Dzięki temu można zazwyczaj zapisać link do strony z wynikami wyszukiwania. Jeśli nie wiesz o co chodzi, porównaj adres wyników wyszukiwania z tego forum bez stosowania powyższego skryptu i z użyciem. A używamy go przed naciśnięciem przycisku "Szukaj" i domyśl się, który będzie rzeczywiście prowadził do wyników konkretnego wyszukiwania.

Data i godzina ostatniej modyfikacji strony
Kod: Zaznacz cały
javascript:{  altx='Zmodyfikowano:\n';   if(frames.length>0)  {    for(i=0;i<frames.length;i++)    {       altx+='frames['+i+']: ' + frames[i].document.lastModified+'\n';    }    alert(altx);  }  else   alert('Zmodyfikowano: ' + document.lastModified);}

Pokazuje kiedy ostatnio zmodyfikowano stronę bądź każdą z ramek. W przypadku stron dynamicznych (PHP, ASP, CGI, ...) wyświetli się godzina wygenerowania danej strony - co czasem też się przydaje...

Tekstowe adresy http -> klikalne linki (Linkify)
Kod: Zaznacz cały
javascript:(function(){var D=document; D.body.normalize(); F(D.body); function F(n){var u,A,M,R,c,x; if(n.nodeType==3){ u=n.data.search(/https?\:\/\/[^\s]*[^.,;'%22>\s\)\]]/); if(u>=0) { M=n.splitText(u); R=M.splitText(RegExp.lastMatch.length); A=document.createElement(%22A%22); A.href=M.data; A.appendChild(M); R.parentNode.insertBefore(A,R); } }else if(n.tagName!=%22STYLE%22 && n.tagName!=%22SCRIPT%22 && n.tagName!=%22A%22)for(c=0;x=n.childNodes[c];++c)F(x); } })();


Tekstowe ed2k na linki ed2k
Kod: Zaznacz cały
javascript:(function(){var D=document; D.body.normalize(); F(D.body); function F(n){var u,A,M,R,c,x; if(n.nodeType==3){ u=n.data.search(/ed2k\:\/\/[^\s]*[^.,;'%22>\s\)\]]/); if(u>=0) { M=n.splitText(u); R=M.splitText(RegExp.lastMatch.length); A=document.createElement(%22A%22); A.href=M.data; A.appendChild(M); R.parentNode.insertBefore(A,R); } }else if(n.tagName!=%22STYLE%22 && n.tagName!=%22SCRIPT%22 && n.tagName!=%22A%22)for(c=0;x=n.childNodes[c];++c)F(x); } })();

Moja modyfikacja poprzedniego, ponieważ pewna strona osiołkowa przezentowała linki w formie zwykłego tekstu.

Licznik znaków dla różnych pól tekstowych
Kod: Zaznacz cały
javascript:(function(){var D=document,i,f,j,e;for(i=0;f=D.forms[i];++i) for(j=0;e=f[j];++j)if(e.type==%22text%22 ||e.type==%22password%22 ||e.tagName.toLowerCase()==%22textarea%22)S(e); function S(e){if(!e.N){var x=D.createElement(%22span%22),s=x.style;s.color=%22green%22; s.background=%22white%22;s.font=%22bold 10pt sans-serif%22;s.verticalAlign=%22top%22; e.parentNode.insertBefore(x,e.nextSibling);function u(){x.innerHTML=e.value.length;}u();e.onchange=u; e.onkeyup=u;e.oninput=u;e.N=x;} else{e.parentNode.removeChild(e.N);e.N=0;}}})()


Mini kalkulator
Kod: Zaznacz cały
javascript:expr=prompt('Formula...(eg:  2*3 + 7/8 )','');if(expr){with(Math){evl=parseFloat(eval(expr))};if(isNaN(evl)) {alert('Not a number!')}else{void(prompt('Result:',evl))}}else{void(null)}


Dodaj duże pole textowe na dole strony (w ramce też)
Kod: Zaznacz cały
javascript:(function(){MyTxtAr = document.createElement(%22div%22); MyTxtAr.innerHTML='<textarea cols=%2280%22 rows=%2240%22></textarea>'; if(frames.length>0) {frno = prompt('Podaj nr ramki [0, 1, 2,...]','3');  frnoi=parseInt(frno); frames[frnoi].document.body.appendChild(MyTxtAr);} else {document.body.appendChild(MyTxtAr)} })();

Czasem lubie sobie coś szybko zanotować, więc wykombinowałem sobie takie coś. Może tylko przesadziłem z rozmiarami - ale to już każdy dostosuje sobie...

Dodaj duże pole textowe na górze strony (w ramce też)
Kod: Zaznacz cały
javascript:(function(){MyTxtAr = document.createElement(%22div%22); MyTxtAr.innerHTML='<textarea cols=%2280%22 rows=%2240%22></textarea>'; if(frames.length>0) {frno = prompt('Podaj nr ramki [0, 1, 2,...]','3');  frnoi=parseInt(frno); dbi=frames[frnoi].document.body.innerHTML; frames[frnoi].document.body.innerHTML=MyTxtAr.innerHTML+dbi;} else {dbi=document.body.innerHTML; document.body.innerHTML=MyTxtAr.innerHTML+dbi;} })();

W miarę korzystania doszedłem do wniosku, że wygodniejszy jest "notatnik" na górze strony.

Ustaw białe tło
Kod: Zaznacz cały
javascript:(function(){  document.bgColor='#FFFFFF';})();

a jeśli nie pomoże, to:
Kod: Zaznacz cały
javascript:(function(){  els=document.getElementsByTagName('*'); for(i=0;i<els.length;++i) els[i].style.backgroundColor="#FFFFFF"; })();

Remove autocomplete=off
Kod: Zaznacz cały
javascript:(function(){var ca,cea,cs,df,dfe,i,j,x,y;function n(i,what) {return i+%22 %22+what+((i==1)?%22%22:%22s%22)}ca=cea=cs=0; df=document.forms;for(i=0;i<df.length;++i){x=df[i];dfe=x.elements; if(x.onsubmit){x.onsubmit=%22%22;++cs;} if(x.attributes[%22autocomplete%22]) {x.attributes[%22autocomplete%22].value=%22on%22;++ca;} for(j=0;j<dfe.length;++j) {y=dfe[j]; if(y.attributes[%22autocomplete%22]) {y.attributes[%22autocomplete%22].value=%22on%22;++cea;}}} alert(%22Removed autocomplete=off from %22+n(ca,%22form%22)+%22 and from %22+n(cea,%22form element%22)+%22, and removed onsubmit from %22+n(cs,%22form%22)+%22. After you type your password and submit the form, the browser will offer to remember your password.%22)})();

Na niektórych stronkach potrzebne, żeby umożliwić FF zapamiętywanie haseł.

resume_session_once=true
Kod: Zaznacz cały
javascript:var oPrefs = Components.classes[ %22@mozilla.org/preferences-service;1%22].getService( Components.interfaces.nsIPrefService).getBranch(%22%22); oPrefs.setBoolPref( %22browser.sessionstore.resume_session_once%22,true);

Tu dla odmiany coś do zabawy z ustawieniami wewnętrznymi FF. Po zastosowaniu FF przy ponownym włączeniu odzyska jednorazowo sesję z chwili zamykania FF.
Zwróć uwagę, czy w bookmarkletach z netu nie ma gdzieś ukrytych podobnych rzeczy, bo mogą narobić szkód.

Show images in directory
Kod: Zaznacz cały
javascript:function showallimagesindirectory(){var s='test';var dc='<b>Images in: '+location.href+'</b><table border=1 style=\'font:x-small verdana\'>';for(var i=0;i<document.links.length;i++){s=document.links[i].href; if(s.toUpperCase().lastIndexOf('.JPG')!=-1 || s.toUpperCase().lastIndexOf('.JPEG')!=-1 || s.toUpperCase().lastIndexOf('.GIF')!=-1 || s.toUpperCase().lastIndexOf('.PNG')!=-1){dc+='<tr>';dc+='<td><img src='+s+'>&nbsp;</td>';dc+='</tr>';}}dc+='</table>';var iw=window.open('','iw','');iw.document.open();iw.document.write(dc); iw.document.close();} showallimagesindirectory();

Zajrzyj pod któryś z wyników zapytania: intitle:index.of jpg gif, użyj skryptozakładki a otworzy się nowe okno/karta z obrazkami z katalogu.

Odtwórz plik video
Kod: Zaznacz cały
javascript:{adrs = prompt('Adres pliku video',''); document.write('<html><body><embed type=%22application/x-mplayer2%22 src=%22'+adrs+'%22 name=%22MediaPlayer%22 width=320 height=240></embed></body></html>');}

Już nie pamiętam co było nie tak, ale chyba niektóre pliki się nie odtwarzały bezpośrednio w FF, a *.wmv chciały się ściągać zamiast odtwarzać i ściągać w tle, więc stworzyłem takie coś :-) Tylko nie jestem pewien czy to zawsze działało...

Linkify javascript inside code tag @ phpBB
Kod: Zaznacz cały
javascript:(function(){ tds=document.getElementsByTagName('td'); for(i=0; i<tds.length; ++i){  if(tds[i].className=='code')  {  tdsih=tds[i].innerHTML; if(tdsih.indexOf('javascript')<0) continue;  tdsihe=tdsih.replace(/%u0040/, '%40'); idxo=tdsihe.indexOf('javascript'); tdsihe=tdsihe.substring(idxo, tdsihe.length); tds[i].innerHTML='<a href="javascript:'+tdsihe.replace(/javascript%253A/,'')+'">'+ tdsih + '</a>';  }} })();

Stworzyłem przed chwilą na potrzeby tego tematu. Zamienia javascript wewnątrz tagu [ code] na odpowiedni link. Może być niedopracowany, bo nie przetestowałem wszystkiego - pewniej będzie ręcznie zaznaczać i kopiować :P
Ostatnio zmieniony 05 września 2007, 22:09 przez Mirek, łącznie zmieniany 3 razy
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Mirek » 16 sierpnia 2007, 20:55

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

Skryptozakładki web developerskie

Edit HTML
Kod: Zaznacz cały
javascript:if(navigator.javaEnabled()!=true){alert('Enable Java!')} else{D=java.io.DataInputStream(java.net.URL(location).openStream()); R='';while((T=D.readLine())!=null) {R+=T+'\n'}D.close();W=open('','X','width=520,height=365,resizable'); with(W.document){write('<center><form><textarea name=TA rows=19 cols=60 wrap>'+R+'</textarea><br><input type=button value=Rewrite onclick=with(opener.document) {write(TA.value);close()}></form>');close()}}void(null)


JS shell
Kod: Zaznacz cały
javascript:with(window.open( %22%22,%22_blank%22,%22width=%22 +screen.width*.6+%22,left=%22+screen.width*.35+%22,height=%22 +screen.height*.9+%22,resizable,scrollbars=yes%22)) {document.write(%22<!DOCTYPE HTML PUBLIC \%22-//W3C//DTD HTML 4.01//EN\%22 \%22http://www.w3.org/TR/html4/strict.dtd\%22>\n\n<html onclick=\%22keepFocusInTextbox(event)\%22>\n<head>\n<meta http-equiv=\%22Content-Type\%22 content=\%22text/html; charset=iso-8859-1\%22>\n<title>JavaScript Shell 1.4</title>\n\n<script type=\%22text/javascript\%22>\nvar \nhistList = [\%22\%22], \nhistPos = 0, \n_scope = {}, \n_win, // a top-level context\nquestion,\n_in,\n_out,\ntooManyMatches = null,\nlastError = null;\n\nfunction refocus()\n{\n  _in.blur(); // Needed for Mozilla to scroll correctly.\n  _in.focus();\n}\n\nfunction init()\n{\n  _in = document.getElementById(\%22input\%22);\n  _out = document.getElementById(\%22output\%22);\n\n  _win = window;\n\n  if (opener && !opener.closed)\n  {\n    println(\%22Using bookmarklet version of shell: commands will run in opener's context.\%22, \%22message\%22);\n    _win = opener;\n  }\n\n  initTarget();\n\n  recalculateInputHeight();\n  refocus();\n}\n\nfunction initTarget()\n{\n  _win.Shell = window;\n  _win.print = shellCommands.print;\n}\n\n\n// Unless the user is selected something, refocus the textbox.\n// (requested by caillon, brendan, asa)\nfunction keepFocusInTextbox(e) \n{\n  var g = e.srcElement ? e.srcElement : e.target; // IE vs. standard\n  \n  while (!g.tagName)\n    g = g.parentNode;\n  var t = g.tagName.toUpperCase();\n  if (t==\%22A\%22 || t==\%22INPUT\%22)\n    return;\n    \n  if (window.getSelection) {\n    // Mozilla\n    if (String(window.getSelection()))\n      return;\n  }\n  else if (document.getSelection) {\n    // Opera? Netscape 4?\n    if (document.getSelection())\n      return;\n  }\n  else {\n    // IE\n    if ( document.selection.createRange().text )\n      return;\n  }\n  \n  refocus();\n}\n\nfunction inputKeydown(e) {\n  // Use onkeydown because IE doesn't support onkeypress for arrow keys\n\n  //alert(e.keyCode + \%22 ^ \%22 + e.keycode);\n\n  if (e.shiftKey && e.keyCode == 13) { // shift-enter\n    // don't do anything; allow the shift-enter to insert a line break as normal\n  } else if (e.keyCode == 13) { // enter\n    // execute the input on enter\n    try { go(); } catch(er) { alert(er); };\n    setTimeout(function() { _in.value = \%22\%22; }, 0); // can't preventDefault on input, so clear it later\n  } else if (e.keyCode == 38) { // up\n    // go up in history if at top or ctrl-up\n    if (e.ctrlKey || caretInFirstLine(_in))\n      hist(true);\n  } else if (e.keyCode == 40) { // down\n    // go down in history if at end or ctrl-down\n    if (e.ctrlKey || caretInLastLine(_in))\n      hist(false);\n  } else if (e.keyCode == 9) { // tab\n    tabcomplete();\n    setTimeout(function() { refocus(); }, 0); // refocus because tab was hit\n  } else { }\n\n  setTimeout(recalculateInputHeight, 0);\n  \n  //return true;\n};\n\nfunction caretInFirstLine(textbox)\n{\n  // IE doesn't support selectionStart/selectionEnd\n  if (textbox.selectionStart == undefined)\n    return true;\n\n  var firstLineBreak = textbox.value.indexOf(\%22\\n\%22);\n  \n  return ((firstLineBreak == -1) || (textbox.selectionStart <= firstLineBreak));\n}\n\nfunction caretInLastLine(textbox)\n{\n  // IE doesn't support selectionStart/selectionEnd\n  if (textbox.selectionEnd == undefined)\n    return true;\n\n  var lastLineBreak = textbox.value.lastIndexOf(\%22\\n\%22);\n  \n  return (textbox.selectionEnd > lastLineBreak);\n}\n\nfunction recalculateInputHeight()\n{\n  var rows = _in.value.split(/\\n/).length\n    + 1 // prevent scrollbar flickering in Mozilla\n    + (window.opera ? 1 : 0); // leave room for scrollbar in Opera\n  \n  if (_in.rows != rows) // without this check, it is impossible to select text in Opera 7.60 or Opera 8.0.\n    _in.rows = rows;\n}\n\nfunction println(s, type)\n{\n  if((s=String(s)))\n  {\n    var newdiv = document.createElement(\%22div\%22);\n    newdiv.appendChild(document.createTextNode(s));\n    newdiv.className = type;\n    _out.appendChild(newdiv);\n    return newdiv;\n  }\n}\n\nfunction printWithRunin(h, s, type)\n{\n  var div = println(s, type);\n  var head = document.createElement(\%22strong\%22);\n  head.appendChild(document.createTextNode(h + \%22: \%22));\n  div.insertBefore(head, div.firstChild);\n}\n\n\nvar shellCommands = \n{\nload : function load(url)\n{\n  var s = _win.document.createElement(\%22script\%22);\n  s.type = \%22text/javascript\%22;\n  s.src = url;\n  _win.document.getElementsByTagName(\%22head\%22)[0].appendChild(s);\n  println(\%22Loading \%22 + url + \%22...\%22, \%22message\%22);\n},\n\nclear : function clear()\n{\n  var CHILDREN_TO_PRESERVE = 3;\n  while (_out.childNodes[CHILDREN_TO_PRESERVE]) \n    _out.removeChild(_out.childNodes[CHILDREN_TO_PRESERVE]);\n},\n\nprint : function print(s) { println(s, \%22print\%22); },\n\n// the normal function, \%22print\%22, shouldn't return a value\n// (suggested by brendan; later noticed it was a problem when showing others)\npr : function pr(s) \n{ \n  shellCommands.print(s); // need to specify shellCommands so it doesn't try window.print()!\n  return s;\n},\n\nprops : function props(e, onePerLine)\n{\n  if (e === null) {\n    println(\%22props called with null argument\%22, \%22error\%22);\n    return;\n  }\n\n  if (e === undefined) {\n    println(\%22props called with undefined argument\%22, \%22error\%22);\n    return;\n  }\n\n  var ns = [\%22Methods\%22, \%22Fields\%22, \%22Unreachables\%22];\n  var as = [[], [], []]; // array of (empty) arrays of arrays!\n  var p, j, i; // loop variables, several used multiple times\n\n  var protoLevels = 0;\n\n  for (p = e; p; p = p.__proto__)\n  {\n    for (i=0; i<ns.length; ++i)\n      as[i][protoLevels] = [];\n    ++protoLevels;\n  }\n\n  for(var a in e)\n  {\n    // Shortcoming: doesn't check that VALUES are the same in object and prototype.\n\n    var protoLevel = -1;\n    try\n    {\n      for (p = e; p && (a in p); p = p.__proto__)\n        ++protoLevel;\n    }\n    catch(er) { protoLevel = 0; } // \%22in\%22 operator throws when param to props() is a string\n\n    var type = 1;\n    try\n    {\n      if ((typeof e[a]) == \%22function\%22)\n        type = 0;\n    }\n    catch (er) { type = 2; }\n\n    as[type][protoLevel].push(a);\n  }\n\n  function times(s, n) { return n ? s + times(s, n-1) : \%22\%22; }\n\n  for (j=0; j<protoLevels; ++j)\n    for (i=0;i<ns.length;++i)\n      if (as[i][j].length) \n        printWithRunin(\n          ns[i] + times(\%22 of prototype\%22, j), \n          (onePerLine ? \%22\\n\\n\%22 : \%22\%22) + as[i][j].sort().join(onePerLine ? \%22\\n\%22 : \%22, \%22) + (onePerLine ? \%22\\n\\n\%22 : \%22\%22), \n          \%22propList\%22\n        );\n},\n\nblink : function blink(node)\n{\n  if (!node)                     throw(\%22blink: argument is null or undefined.\%22);\n  if (node.nodeType == null)     throw(\%22blink: argument must be a node.\%22);\n  if (node.nodeType == 3)        throw(\%22blink: argument must not be a text node\%22);\n  if (node.documentElement)      throw(\%22blink: argument must not be the document object\%22);\n\n  function setOutline(o) { \n    return function() {\n      if (node.style.outline != node.style.bogusProperty) {\n        // browser supports outline (Firefox 1.1 and newer, CSS3, Opera 8).\n        node.style.outline = o;\n      }\n      else if (node.style.MozOutline != node.style.bogusProperty) {\n        // browser supports MozOutline (Firefox 1.0.x and older)\n        node.style.MozOutline = o;\n      }\n      else {\n        // browser only supports border (IE). border is a fallback because it moves things around.\n        node.style.border = o;\n      }\n    }\n  } \n  \n  function focusIt(a) {\n    return function() {\n      a.focus(); \n    }\n  }\n\n  if (node.ownerDocument) {\n    var windowToFocusNow = (node.ownerDocument.defaultView || node.ownerDocument.parentWindow); // Moz vs. IE\n    if (windowToFocusNow)\n      setTimeout(focusIt(windowToFocusNow.top), 0);\n  }\n\n  for(var i=1;i<7;++i)\n    setTimeout(setOutline((i%252)?'3px solid red':'none'), i*100);\n\n  setTimeout(focusIt(window), 800);\n  setTimeout(focusIt(_in), 810);\n},\n\nscope : function scope(sc)\n{\n  if (!sc) sc = {};\n  _scope = sc;\n  println(\%22Scope is now \%22 + sc + \%22.  If a variable is not found in this scope, window will also be searched.  New variables will still go on window.\%22, \%22message\%22);\n},\n\nmathHelp : function mathHelp()\n{\n  printWithRunin(\%22Math constants\%22, \%22E, LN2, LN10, LOG2E, LOG10E, PI, SQRT1_2, SQRT2\%22, \%22propList\%22);\n  printWithRunin(\%22Math methods\%22, \%22abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random, round, sin, sqrt, tan\%22, \%22propList\%22);\n},\n\nans : undefined\n};\n\n\nfunction hist(up)\n{\n  // histList[0] = first command entered, [1] = second, etc.\n  // type something, press up --> thing typed is now in \%22limbo\%22\n  // (last item in histList) and should be reachable by pressing \n  // down again.\n\n  var L = histList.length;\n\n  if (L == 1)\n    return;\n\n  if (up)\n  {\n    if (histPos == L-1)\n    {\n      // Save this entry in case the user hits the down key.\n      histList[histPos] = _in.value;\n    }\n\n    if (histPos > 0)\n    {\n      histPos--;\n      // Use a timeout to prevent up from moving cursor within new text\n      // Set to nothing first for the same reason\n      setTimeout(\n        function() {\n          _in.value = ''; \n          _in.value = histList[histPos];\n          var caretPos = _in.value.length;\n          if (_in.setSelectionRange) \n            _in.setSelectionRange(caretPos, caretPos);\n        },\n        0\n      );\n    }\n  } \n  else // down\n  {\n    if (histPos < L-1)\n    {\n      histPos++;\n      _in.value = histList[histPos];\n    }\n    else if (histPos == L-1)\n    {\n      // Already on the current entry: clear but save\n      if (_in.value)\n      {\n        histList[histPos] = _in.value;\n        ++histPos;\n        _in.value = \%22\%22;\n      }\n    }\n  }\n}\n\nfunction tabcomplete()\n{\n  /*\n   * Working backwards from s[from], find the spot\n   * where this expression starts.  It will scan\n   * until it hits a mismatched ( or a space,\n   * but it skips over quoted strings.\n   * If stopAtDot is true, stop at a '.'\n   */\n  function findbeginning(s, from, stopAtDot)\n  {\n    /*\n     *  Complicated function.\n     *\n     *  Return true if s[i] == q BUT ONLY IF\n     *  s[i-1] is not a backslash.\n     */\n    function equalButNotEscaped(s,i,q)\n    {\n      if(s.charAt(i) != q) // not equal go no further\n        return false;\n\n      if(i==0) // beginning of string\n        return true;\n\n      if(s.charAt(i-1) == '\\\\') // escaped?\n        return false;\n\n      return true;\n    }\n\n    var nparens = 0;\n    var i;\n    for(i=from; i>=0; i--)\n    {\n      if(s.charAt(i) == ' ')\n        break;\n\n      if(stopAtDot && s.charAt(i) == '.')\n        break;\n        \n      if(s.charAt(i) == ')')\n        nparens++;\n      else if(s.charAt(i) == '(')\n        nparens--;\n\n      if(nparens < 0)\n        break;\n\n      // skip quoted strings\n      if(s.charAt(i) == '\\'' || s.charAt(i) == '\\\%22')\n      {\n        //dump(\%22skipping quoted chars: \%22);\n        var quot = s.charAt(i);\n        i--;\n        while(i >= 0 && !equalButNotEscaped(s,i,quot)) {\n          //dump(s.charAt(i));\n          i--;\n        }\n        //dump(\%22\\n\%22);\n      }\n    }\n    return i;\n  }\n\n  // XXX should be used more consistently (instead of using selectionStart/selectionEnd throughout code)\n  // XXX doesn't work in IE, even though it contains IE-specific code\n  function getcaretpos(inp)\n  {\n    if(inp.selectionEnd != null)\n      return inp.selectionEnd;\n      \n    if(inp.createTextRange)\n    {\n      var docrange = _win.Shell.document.selection.createRange();\n      var inprange = inp.createTextRange();\n      if (inprange.setEndPoint)\n      {\n        inprange.setEndPoint('EndToStart', docrange);\n        return inprange.text.length;\n      }\n    }\n\n    return inp.value.length; // sucks, punt\n  }\n\n  function setselectionto(inp,pos)\n  {\n    if(inp.selectionStart) {\n      inp.selectionStart = inp.selectionEnd = pos;\n    }\n    else if(inp.createTextRange) {\n      var docrange = _win.Shell.document.selection.createRange();\n      var inprange = inp.createTextRange();\n      inprange.move('character',pos);\n      inprange.select();\n    }\n    else { // err...\n    /*\n      inp.select();\n      if(_win.Shell.document.getSelection())\n        _win.Shell.document.getSelection() = \%22\%22;\n        */\n    }\n  }\n    // get position of cursor within the input box\n    var caret = getcaretpos(_in);\n\n    if(caret) {\n      //dump(\%22----\\n\%22);\n      var dotpos, spacepos, complete, obj;\n      //dump(\%22caret pos: \%22 + caret + \%22\\n\%22);\n      // see if there's a dot before here\n      dotpos = findbeginning(_in.value, caret-1, true);\n      //dump(\%22dot pos: \%22 + dotpos + \%22\\n\%22);\n      if(dotpos == -1 || _in.value.charAt(dotpos) != '.') {\n        dotpos = caret;\n//dump(\%22changed dot pos: \%22 + dotpos + \%22\\n\%22);\n      }\n\n      // look backwards for a non-variable-name character\n      spacepos = findbeginning(_in.value, dotpos-1, false);\n      //dump(\%22space pos: \%22 + spacepos + \%22\\n\%22);\n      // get the object we're trying to complete on\n      if(spacepos == dotpos || spacepos+1 == dotpos || dotpos == caret)\n      {\n        // try completing function args\n        if(_in.value.charAt(dotpos) == '(' ||\n (_in.value.charAt(spacepos) == '(' && (spacepos+1) == dotpos))\n        {\n          var fn,fname;\n  var from = (_in.value.charAt(dotpos) == '(') ? dotpos : spacepos;\n          spacepos = findbeginning(_in.value, from-1, false);\n\n          fname = _in.value.substr(spacepos+1,from-(spacepos+1));\n  //dump(\%22fname: \%22 + fname + \%22\\n\%22);\n          try {\n            with(_win.Shell._scope)\n              with(_win)\n                with(Shell.shellCommands)\n                  fn = eval(fname);\n          }\n          catch(er) {\n            //dump('fn is not a valid object\\n');\n            return;\n          }\n          if(fn == undefined) {\n             //dump('fn is undefined');\n             return;\n          }\n          if(fn instanceof Function)\n          {\n            // Print function definition, including argument names, but not function body\n            if(!fn.toString().match(/function .+?\\(\\) +\\{\\n +\\[native code\\]\\n\\}/))\n              println(fn.toString().match(/function .+?\\(.*?\\)/), \%22tabcomplete\%22);\n          }\n\n          return;\n        }\n        else\n          obj = _win;\n      }\n      else\n      {\n        var objname = _in.value.substr(spacepos+1,dotpos-(spacepos+1));\n        //dump(\%22objname: |\%22 + objname + \%22|\\n\%22);\n        try {\n          with(_win.Shell._scope)\n            with(_win)\n                obj = eval(objname);\n        }\n        catch(er) {\n          printError(er); \n          return;\n        }\n        if(obj == undefined) {\n          // sometimes this is tabcomplete's fault, so don't print it :(\n          // e.g. completing from \%22print(document.getElements\%22\n          // println(\%22Can't complete from null or undefined expression \%22 + objname, \%22error\%22);\n          return;\n        }\n      }\n      //dump(\%22obj: \%22 + obj + \%22\\n\%22);\n      // get the thing we're trying to complete\n      if(dotpos == caret)\n      {\n        if(spacepos+1 == dotpos || spacepos == dotpos)\n        {\n          // nothing to complete\n          //dump(\%22nothing to complete\\n\%22);\n          return;\n        }\n\n        complete = _in.value.substr(spacepos+1,dotpos-(spacepos+1));\n      }\n      else {\n        complete = _in.value.substr(dotpos+1,caret-(dotpos+1));\n      }\n      //dump(\%22complete: \%22 + complete + \%22\\n\%22);\n      // ok, now look at all the props/methods of this obj\n      // and find ones starting with 'complete'\n      var matches = [];\n      var bestmatch = null;\n      for(var a in obj)\n      {\n        //a = a.toString();\n        //XXX: making it lowercase could help some cases,\n        // but screws up my general logic.\n        if(a.substr(0,complete.length) == complete) {\n          matches.push(a);\n          ////dump(\%22match: \%22 + a + \%22\\n\%22);\n          // if no best match, this is the best match\n          if(bestmatch == null)\n          {\n            bestmatch = a;\n          }\n          else {\n            // the best match is the longest common string\n            function min(a,b){ return ((a<b)?a:b); }\n            var i;\n            for(i=0; i< min(bestmatch.length, a.length); i++)\n            {\n              if(bestmatch.charAt(i) != a.charAt(i))\n                break;\n            }\n            bestmatch = bestmatch.substr(0,i);\n            ////dump(\%22bestmatch len: \%22 + i + \%22\\n\%22);\n          }\n          ////dump(\%22bestmatch: \%22 + bestmatch + \%22\\n\%22);\n        }\n      }\n      bestmatch = (bestmatch || \%22\%22);\n      ////dump(\%22matches: \%22 + matches + \%22\\n\%22);\n      var objAndComplete = (objname || obj) + \%22.\%22 + bestmatch;\n      //dump(\%22matches.length: \%22 + matches.length + \%22, tooManyMatches: \%22 + tooManyMatches + \%22, objAndComplete: \%22 + objAndComplete + \%22\\n\%22);\n      if(matches.length > 1 && (tooManyMatches == objAndComplete || matches.length <= 10)) {\n\n        printWithRunin(\%22Matches: \%22, matches.join(', '), \%22tabcomplete\%22);\n        tooManyMatches = null;\n      }\n      else if(matches.length > 10)\n      {\n        println(matches.length + \%22 matches.  Press tab again to see them all\%22, \%22tabcomplete\%22);\n        tooManyMatches = objAndComplete;\n      }\n      else {\n        tooManyMatches = null;\n      }\n      if(bestmatch != \%22\%22)\n      {\n        var sstart;\n        if(dotpos == caret) {\n          sstart = spacepos+1;\n        }\n        else {\n          sstart = dotpos+1;\n        }\n        _in.value = _in.value.substr(0, sstart)\n                  + bestmatch\n                  + _in.value.substr(caret);\n        setselectionto(_in,caret + (bestmatch.length - complete.length));\n      }\n    }\n}\n\nfunction printQuestion(q)\n{\n  println(q, \%22input\%22);\n}\n\nfunction printAnswer(a)\n{\n  if (a !== undefined) {\n    println(a, \%22normalOutput\%22);\n    shellCommands.ans = a;\n  }\n}\n\nfunction printError(er)\n{ \n  var lineNumberString;\n\n  lastError = er; // for debugging the shell\n  if (er.name)\n  {\n    // lineNumberString should not be \%22\%22, to avoid a very wacky bug in IE 6.\n    lineNumberString = (er.lineNumber != undefined) ? (\%22 on line \%22 + er.lineNumber + \%22: \%22) : \%22: \%22;\n    println(er.name + lineNumberString + er.message, \%22error\%22); // Because IE doesn't have error.toString.\n  }\n  else\n    println(er, \%22error\%22); // Because security errors in Moz /only/ have toString.\n}\n\nfunction go(s)\n{\n  _in.value = question = s ? s : _in.value;\n\n  if (question == \%22\%22)\n    return;\n\n  histList[histList.length-1] = question;\n  histList[histList.length] = \%22\%22;\n  histPos = histList.length - 1;\n  \n  // Unfortunately, this has to happen *before* the JavaScript is run, so that \n  // print() output will go in the right place.\n  _in.value='';\n  recalculateInputHeight();\n  printQuestion(question);\n\n  if (_win.closed) {\n    printError(\%22Target window has been closed.\%22);\n    return;\n  }\n  \n  try { (\%22Shell\%22 in _win) }\n  catch(er) {\n    printError(\%22The JavaScript Shell cannot access variables in the target window.  The most likely reason is that the target window now has a different page loaded and that page has a different hostname than the original page.\%22);\n    return;\n  }\n\n  if (!(\%22Shell\%22 in _win))\n    initTarget(); // silent\n\n  // Evaluate Shell.question using _win's eval (this is why eval isn't in the |with|, IIRC).\n  _win.location.href = \%22javascript:try{ Shell.printAnswer(eval('with(Shell._scope) with(Shell.shellCommands) {' + Shell.question + String.fromCharCode(10) + '}')); } catch(er) { Shell.printError(er); }; setTimeout(Shell.refocus, 0); void 0\%22;\n}\n\n</script>\n\n<!-- for http://ted.mielczarek.org/code/mozilla/extensiondev/ -->\n<script type=\%22text/javascript\%22 src=\%22chrome://extensiondev/content/rdfhistory.js\%22></script>\n<script type=\%22text/javascript\%22 src=\%22chrome://extensiondev/content/chromeShellExtras.js\%22></script>\n\n<style type=\%22text/css\%22>\nbody { background: white; color: black; }\n\n#output { white-space: pre; white-space: -moz-pre-wrap; } /* Preserve line breaks, but wrap too if browser supports it */\nh3 { margin-top: 0; margin-bottom: 0em; }\nh3 + div { margin: 0; }\n\nform { margin: 0; padding: 0; }\n#input { width: 100%25; border: none; padding: 0; overflow: auto; }\n\n.input { color: blue; background: white; font: inherit; font-weight: bold; margin-top: .5em; /* background: #E6E6FF; */ }\n.normalOutput { color: black; background: white; }\n.print { color: brown; background: white; }\n.error { color: red; background: white; }\n.propList { color: green; background: white; }\n.message { color: green; background: white; }\n.tabcomplete { color: purple; background: white; }\n</style>\n</head>\n\n<body onload=\%22init()\%22>\n\n<div id=\%22output\%22><h3>JavaScript Shell 1.4</h3><div>Features: autocompletion of property names with Tab, multiline input with Shift+Enter, input history with (Ctrl+) Up/Down, <a accesskey=\%22M\%22 href=\%22javascript:go('scope(Math); mathHelp();');\%22 title=\%22Accesskey: M\%22>Math</a>, <a accesskey=\%22H\%22 href=\%22http://www.squarefree.com/shell/?ignoreReferrerFrom=shell1.4\%22  title=\%22Accesskey: H\%22>help</a></div><div>Values and functions: ans, print(string), <a accesskey=\%22P\%22 href=\%22javascript:go('props(ans)')\%22 title=\%22Accesskey: P\%22>props(object)</a>, <a accesskey=\%22B\%22 href=\%22javascript:go('blink(ans)')\%22 title=\%22Accesskey: B\%22>blink(node)</a>, <a accesskey=\%22C\%22 href=\%22javascript:go('clear()')\%22 title=\%22Accesskey: C\%22>clear()</a>, load(scriptURL), scope(object)</div></div>\n\n<div><textarea id=\%22input\%22 class=\%22input\%22 wrap=\%22off\%22 onkeydown=\%22inputKeydown(event)\%22 rows=\%221\%22></textarea></div>\n\n</body>\n\n</html>%22); document.close();}void 0



jsenv (Javascript Development Enviroment 2.0.1)
Kod: Zaznacz cały
javascript:with(window.open(%22%22,%22_blank%22,%22width=%22 +screen.width*.6+%22,left=%22+screen.width*.35+%22,height=%22 +screen.height*.9+%22,resizable,scrollbars=yes%22)) {document.write(%22<head><title>JavaScript Development Environment 2.0.1</title><!-- about:blank confuses opera.. --></head><frameset rows=\%2225,*,*\%22>\n\n  <frame name=\%22toolbarFrame\%22 src=\%22about:blank\%22 noresize=\%22noresize\%22>\n\n  <frame name=\%22inputFrame\%22 src=\%22about:blank\%22>\n\n  <frame name=\%22outputFrame\%22 src=\%22about:blank\%22>\n\n</frameset>\n\n%22);document.close(); frames[0].document.write(%22<head><!-- no doctype - it makes IE ignore the height: 100%25. --><title>toolbarFrame</title>\n\n\n\n<style type=\%22text/css\%22>\nhtml,body { width: 100%25; height: 100%25; border: none; margin: 0px; padding: 0px; }\nbutton { height: 100%25; }\n</style>\n\n<script type=\%22text/javascript\%22>\n\nvar outputFrame = parent.outputFrame;\nvar inputFrame = parent.inputFrame;\nvar framesetElement = parent.document.documentElement.getElementsByTagName(\%22frameset\%22)[0]; \n\nvar savedRows;\n\n\n// Need to use C-style comments in handleError() and print() \n// because IE retains them when decompiling a function.\n\n\n\nfunction print(s, c) {\n  var outputFrame = parent.outputFrame; /* duplicated here in case this function is elsewhere */\n  var doc = outputFrame.document;\n\n  var newdiv = doc.createElement(\%22div\%22);\n  newdiv.appendChild(doc.createTextNode(s));\n  if (c)\n    newdiv.style.color = c;\n  doc.body.appendChild(newdiv);\n}\n\nfunction handleError(er, file, lineNumber) \n{\n  print(\%22Error on line \%22 + lineNumber + \%22: \%22 + er, \%22red\%22); \n    \n  /* Find the character offset for the line */\n  /* (code adapted from blogidate xml well-formedness bookmarklet) */\n  var ta = inputFrame.document.getElementById(\%22input\%22);\n  var lines = ta.value.split(\%22\\n\%22);\n  var cc = 0; \n  var i;\n  for(i=0; i < (lineNumber - 1); ++i) \n    cc += lines[i].length + 1;\n\n  /* Hacky(?) workaround for IE's habit of including \\r's in strings */\n  if (ta.value.split(\%22\\r\%22).length > 1)\n    cc -= lineNumber - 1;\n\n  /* Select the line */\n  if(document.selection) { \n    /* IE (Leonard Lin gave me this code) */\n    var sel = ta.createTextRange(); \n    sel.moveStart(\%22character\%22, cc); \n    sel.collapse(); \n    sel.moveEnd(\%22character\%22, lines[i].length); \n    sel.select();\n  } else { \n    /* Mozilla */\n    ta.selectionStart = cc; \n    ta.selectionEnd = cc + lines[i].length; \n  }\n \n  /* return true; */ /* nah, let the error go through to IE's js consolish thing! */\n}\n\n\n\n\n\nfunction showHideOutput()\n{\n  if (outputFrame.document.body.clientHeight > 100) {\n    // hide\n    savedRows = framesetElement.rows;    \n    framesetElement.rows = \%2225,*,0\%22;\n  }\n  else {\n    // show. use the previous size, if possible\n    if (savedRows) {\n      framesetElement.rows = savedRows;\n      savedRows = null;\n    }\n    else {\n      framesetElement.rows = \%2225,*,*\%22;\n    }\n  }\n}\n\nfunction refocus()\n{\n  inputFrame.document.getElementById(\%22input\%22).focus(); \n}\n\n\nfunction clearOutput()\n{\n  var b = outputFrame.document.body;\n  while(b.firstChild)\n    b.removeChild(b.firstChild);\n}\n\nfunction stripLineBreaks(s)\n{\n  return s.replace(/\\n/g, \%22\%22).replace(/\\r/g, \%22\%22); // stripping \\r is for IE\n}\n\nfunction execute()\n{\n  var js = inputFrame.document.getElementById(\%22input\%22).value;\n\n  var useOpener = parent.opener && !parent.opener.closed;\n  var oldStyle = !! document.all; // lame but meh.\n  \n  print(\%22Running\%22 + (useOpener ? \%22 in bookmarklet mode\%22 : \%22\%22) + (oldStyle ? \%22 in make-IE-happy mode\%22 : \%22\%22) + \%22...\%22, \%22orange\%22);\n\n  if (useOpener)\n    executeWithJSURL(js, parent.opener); // only way to execute against another frame\n  else if (oldStyle)\n    executeWithDW(js, execFrame); // only way to get line numbers in IE\n  else\n    executeWithJSURL(js, execFrame); // faster in Mozilla  \n}\n\n// Advantages: can get line numbers in IE.\nfunction executeWithDW(js, win)\n{\n  win.document.open();\n  win.inputFrame = inputFrame;\n  win.outputFrame = outputFrame;\n  win.document.write(\n    stripLineBreaks(\n        '<!DOCTYPE HTML PUBLIC \%22-//W3C//DTD HTML 4.01//EN\%22 \%22http://www.w3.org/TR/html4/strict.dtd\%22>' +\n        '<html><head><title>execFrame<\\/title><script type=\%22text/javascript\%22>'\n      + print         // yay for decompilation!\n      + handleError \n      + \%22window.onerror = handleError;\%22\n      + \%22<\\/script><\\/head>\%22\n      ) \n    + '<body><script type=\%22text/javascript\%22>'\n    + js         // should escape it a little to remove the string <\\/script> at least...\n    + \%22<\\/script><\\/body><\\/html>\%22\n    );\n  win.document.close();\n}\n\n// Advantages: can be used to inject a script into another window, faster in Mozilla.\nfunction executeWithJSURL(js, win)\n{\n  // isolate scope\n  js = \%22(function(){ \%22 + js + \%22 \\n })()\%22;\n\n  win.print = print;\n  win.onerror = handleError;\n\n  // double encodeURIComponent because javascript: URLs themselves are encoded!\n  win.location.href = 'javascript:eval(decodeURIComponent(\%22' + encodeURIComponent(encodeURIComponent(js)) + '\%22)); void 0;';\n  \n  refocus();\n}\n\n// Other ideas I haven't tried lately: create a <script> element, eval.\n\n\nfunction makeUserScript(userScriptLink)\n{\n    userScriptLink.href = \n        \%22data:text/javascript;charset=utf-8,\%22 + \n        encodeURIComponent(inputFrame.document.getElementById(\%22input\%22).value + \%22//.user.js\%22);\n}\n\n</script></head><body>\n\n<button accesskey=\%22E\%22 onclick=\%22execute(); refocus();\%22><u>E</u>xecute</button>\n<!-- <button accesskey=\%22R\%22 onclick=\%22reloadAndExecute(); refocus();\%22><u>R</u>eload and execute</button> -->\n<button accesskey=\%22C\%22 onclick=\%22clearOutput(); refocus();\%22><u>C</u>lear output</button>\n<button accesskey=\%22S\%22 onclick=\%22showHideOutput(); refocus();\%22><u>S</u>how/hide output</button>\n<!-- <button accesskey=\%22H\%22 onclick=\%22help(); refocus();\%22><u>H</u>elp</button> -->\n\n<a href=\%22data:text/html,...\%22 onfocus=\%22makeUserScript(this);\%22 onmouseover=\%22makeUserScript(this);\%22 target=\%22_blank\%22>Install as user script</a>\n\n<div style=\%22visibility: hidden;\%22>\n<iframe name=\%22execFrame\%22 src=\%22about:blank\%22 height=\%225\%22 width=\%225\%22></iframe>\n</div>\n\n</body>%22); frames[0].document.close(); frames[1].document.write(%22<head><!-- no doctype - it makes IE ignore the height: 100%25. --><title>inputFrame</title>\n\n\n\n\n\n<style type=\%22text/css\%22>\n\nhtml,body,form,textarea { width: 100%25; height: 100%25; border: none; margin: 0px; padding: 0px; }\nhtml,body { overflow: hidden; }\n\n</style></head><body onload=\%22document.getElementById('input').select();\%22>\n<textarea style=\%22background-color: rgb(221, 238, 255);\%22 id=\%22input\%22>// ==UserScript==\n// @namespace     http://www.squarefree.com/jsenv/autogenerated\n// @name          Unnamed script\n// @description   Undescribed script\n// ==/UserScript==\n\nprint(\%22Squares of numbers 0 through 4:\%22);\nfor (var i = 0; i &lt; 5; ++i)\n  print(i * i);\n\nthis.statement.causes(an.error);\n</textarea>\n</body>%22); frames[1].document.close();   }void 0


216 standard HTML colors
Kod: Zaznacz cały
javascript:t='';c=new Array('00','33','66','99','CC','FF');for(i=0;i<6;i++){t+='<table width=100%>';for(j=0;j<6;j++){t+='<tr>';for(k=0;k<6;k++){L=c[i]+c[j]+c[k];t+='<td bgcolor='+L+'>'+L}t+='</tr>'}t+='</table>'};with(document){write(t);void(close())}


Show hiddens
Kod: Zaznacz cały
javascript:(function(){var i,f,j,e,div,label,ne; for(i=0;f=document.forms[i];++i)for(j=0;e=f[j];++j)if(e.type==%22hidden%22){ D=document; function C(t){return D.createElement(t);} function A(a,b){a.appendChild(b);} div=C(%22div%22); label=C(%22label%22); A(div, label); A(label, D.createTextNode(e.name + %22: %22)); e.parentNode.insertBefore(div, e); e.parentNode.removeChild(e); ne=C(%22input%22);/*for ie*/ ne.type=%22text%22; ne.value=e.value; A(label, ne); label.style.MozOpacity=%22.6%22; --j;/*for moz*/}})()



Allow no option
Kod: Zaznacz cały
javascript:(function(){function down(){bmlRadioValue=this.checked;bmlRadioRef=this;} function click() {if((window.bmlRadioRef==this)&&window.bmlRadioValue) {this.checked=false;bmlRadioRef=null;}}function mU(radio){radio.onmousedown=down; radio.onkeydown=down;radio.onclick=click;}var x,k,f,j;x=document.forms;for (k=0;k<x.length;++k) {f=x[k];for(j=0;j<f.length;++j) if(f[j].type.toLowerCase()==%22radio%22)mU(f[j]);} window.status=%22To unselect a selected option button, click on it or press spacebar.%22})();


Enable edit mode
Kod: Zaznacz cały
javascript:document.body.contentEditable = 'true'; document.designMode='on'; void 0


Disable edit mode (+ trzeba zamknąć edytowaną kartę)
Kod: Zaznacz cały
javascript:document.body.contentEditable = 'true'; document.designMode='on'; void 0
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Mirek » 16 sierpnia 2007, 20:56

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

Skryptozakładki wykorzystujące serwisy

Utwórz TinyURL dla bieżącej strony
Kod: Zaznacz cały
javascript:void(location.href='http://tinyurl.com/create.php?url=' +location.href)


Keep it! (JS videodownloader)
Kod: Zaznacz cały
javascript:document.location= 'http://keepvid.com/?url='+escape(window.location);

Odpowiednik rozszerzenia videodownloader, nie obciążający dodatkowo FFa.

BugMeNot.com
Kod: Zaznacz cały
javascript:(function(){w=open(('http://www.bugmenot.com/view/' +escape(location)), 'w','location=no,status=yes,menubar=no,scrollbars=yes, resizable=yes,width=500, height=400,modal=yes,dependent=yes');if(w) {setTimeout('w.focus()',1000)}else {location='http://www.bugmenot.com/view/'+escape(location)}})();

Wyszukiwarka loginów i haseł do aktualnego serwisu. Wyniki pojawiają się w osobnym okienku, "zawsze" na wierzchu. Zamiast przepisywać można zaznaczyć login/hasło dwuklikiem i przeciągnąć do odpowiedniego pola w formularzu logowania.

Tłumacz EN<->PL @ dict.pl
Kod: Zaznacz cały
javascript:(function(){ function getSearchString (promptString) { s = null; if (document.selection && document.selection.createRange) { s = document.selection.createRange().text; } else if (document.getSelection) { s = document.getSelection();  if (! (s && s.length)) {if(frames.length>0){for(i=0;i<frames.length;i++) {s=frames[i].document.getSelection();if(s)break;}}} } if (! (s && s.length)) { s = prompt(promptString,''); } return s; } searchString = getSearchString('Podaj słowo (EN lub PL) do sprawdzenia w słowniku (lub zaznacz słowo przed użyciem bookmarleta)'); if (searchString != null) { if (searchString.length) { location = 'http://www.dict.pl/plen?word='+escape(searchString).replace(/%u0105/g, '\x25B1').replace(/%u0107/g, '\x25E6').replace(/%u0119/g, '\x25EA').replace(/%u0142/g, '\x25B3').replace(/%u0144/g, '\x25F1').replace(/%u015B/g, '\x25B6').replace(/%u017A/g, '\x25BC').replace(/%u017C/g, '\x25BF').replace(/\x2520/g, '+').replace(/%u0104/g, '\x25A1').replace(/%u0106/g, '\x25C6').replace(/%u0118/g, '\x25CA').replace(/%u0141/g, '\x25A3').replace(/%u0143/g, '\x25D1').replace(/%u015A/g, '\x25A6').replace(/%u0179/g, '\x25AC').replace(/%u017B/g, '\x25AF'); } else { location = 'http://www.dict.pl'; } }  })();

Tłumaczy zaznaczone słowo lub jeśli brak zaznaczenia - prosi o wpisanie słowa.

Google Translate It!
Kod: Zaznacz cały
javascript:(function(){ document.location.href='http://translate.google.com/translate?u=' +escape(document.location.href) })();

Z wybranych obcych języków na angielski - ew. trzeba poprzestawiać ręcznie z jakiego i na jaki...
Ostatnio zmieniony 17 sierpnia 2007, 17:10 przez Mirek, łącznie zmieniany 2 razy
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Mirek » 16 sierpnia 2007, 20:57

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

Związane z konkretnymi stronami

Zaznacz interesujące mnie kanały w programie Cyfry+
Kod: Zaznacz cały
javascript:(function(){  for(i=0;i<prog.can.length;++i)  {    x=prog.can.options[i];    if( x.value=='ACA' || x.value=='ACZ' || x.value=='ALE' || x.value=='ANP'     || x.value=='AXN' || x.value=='AXR' || x.value=='AXS' || x.value=='BBP'     || x.value=='CIN' || x.value=='CLB' || x.value=='DCV' || x.value=='DIS'     || x.value=='DSC' || x.value=='DTR' || x.value=='EXE' || x.value=='HB2'     || x.value=='HBO' || x.value=='NGE' || x.value=='PLA' || x.value=='REA'     || x.value=='TEL' || x.value=='TST' || x.value=='TTU' || x.value=='TV1'     || x.value=='TV2' || x.value=='TV3' || x.value=='TV4' || x.value=='TV7'     || x.value=='TVN' || x.value=='TVP' || x.value=='HAL' || x.value=='KTV' || x.value=='HCO' || x.value=='KPL' )    {      x.selected = true;    }  }  prog.submit();})();

Przy czym nie trzeba mieć Cyfry, żeby z tego korzystać - ja osobiście mam tylko parę kanałów z kablówki. Żeby rozszerzyć/zawężyć listę trzeba zerknąć do kodu źródłowego strony i odpowiednio zmodyfikować warunek id.

Punkty na bash.org.pl/latest
Kod: Zaznacz cały
javascript:(function(){ wsio=document.getElementsByTagName('div');  for(i=0;i<wsio.length;++i) { if(wsio[i].className=='bar') { wsio[i].innerHTML=wsio[i].innerHTML+wsio[i].childNodes[3].innerHTML;} } })();

Kiedyś ktoś napisał, że po ukryciu punktów (widoczne teraz dopiero po oddaniu głosu) nie wie czy dany tekst jest śmieszny, czy nie...

Kod z obrazka na forum mozillapl.org
Kod: Zaznacz cały
javascript:(function(){  document.getElementsByName('gpvc_code')[0].value='791213';})();

Chyba jest uzależniony od IP - więc przy stałym IP jest zawsze ten sam kod. A ponieważ udzielałem się tu od paru lat bez rejestracji, to korzystałem z takiego usprawnienia. Ale w końcu się zarejestrowałem...
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Mirek » 16 sierpnia 2007, 21:03

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

Związane z forami phpBB (i nie tylko)

IP 2 Hex
Kod: Zaznacz cały
javascript:ipek=prompt('Podaj decymalny IP do zamiany na hex', ''); okt=ipek.split('.'); heks0 = ('' + parseInt(okt[0]).toString(16)).toLowerCase(); heks1 = ('' + parseInt(okt[1]).toString(16)).toLowerCase(); heks2 = ('' + parseInt(okt[2]).toString(16)).toLowerCase(); heks3 = ('' + parseInt(okt[3]).toString(16)).toLowerCase(); prompt('Heksadecymalne IP:', '' + heks0 + heks1 + heks2 + heks3);

W wielu skryptach adresy IP są przechowywane w w postaci szesnastkowej. Ten skrypt zamienia z notacji kropkowej na szesnastkową.

Hex 2 IP
Kod: Zaznacz cały
javascript: ipek=prompt('Podaj heksadecymalny IP do zamiany na dec', ''); okt0 = '' + parseInt(''+ipek.charAt(0)+ ipek.charAt(1), 16); okt1 = '' + parseInt(''+ipek.charAt(2)+ ipek.charAt(3), 16); okt2 = '' + parseInt(''+ipek.charAt(4)+ ipek.charAt(5), 16); okt3 = '' + parseInt(''+ipek.charAt(6)+ ipek.charAt(7), 16); prompt('Decymalne IP:', ' ' + okt0 + '.' + okt1 + '.' + okt2 + '.' + okt3);

A tu w drugą stronę...

Licznik znaków w poście
Kod: Zaznacz cały
javascript:(function(){var D=document,i,f,j,e;for(i=0;f=D.forms[i];++i)for(j=0;e=f[j];++j) if(e.type==%22text%22||e.type==%22password%22 || e.tagName.toLowerCase()==%22textarea%22)S(e); function S(e){if(!e.N){var x=D.createElement(%22span%22),s=x.style;s.color=%22green%22; s.background=%22white%22;s.font=%22bold 10pt sans-serif%22;s.verticalAlign=%22top%22; e.parentNode.insertBefore(x,e.nextSibling); function u(){  match_arr=e.value.match(/\[\/{0,1}(b|i|u|size.*?|quote.*?|code)\]/g); x.innerHTML= e.value.length + e.value.split(/\n/).length-1+((match_arr!=null) ? match_arr.length*11 : 0); } u();e.onchange=u; e.onkeyup=u;e.oninput=u;e.N=x;} else{e.parentNode.removeChild(e.N);e.N=0;}}})()

Zmodyfikowana wcześniejsza wersja - oblicza ile zajmie w bazie SQL, ponieważ dolicza dodawane identyfikatory UID przy różnych tagach, znak nowej linii CR/LF liczy się podwójnie, itp.) Przydatne przy tworzeniu bardzo dużych postów ze sporą liczbą tagów BB, tak by zmieścić się w limicie (przeważnie 6500 znaków)

Zamiana tekstu wewnątrz tworzonego posta
Kod: Zaznacz cały
javascript:(function(){ message.value=message.value.replace(/10.10.10.1/g, '10.10.1.1'); })();

Ostatnio wklejałem wynik działania ping'a i paru innych poleceń, ale nie chciałem się chwalić na forum swoim IP, to skorzystałem z tego skrypciku.
Można sobie przerobić żeby pytał (prompt() ) co przerobić i na co..

?? -> ISO-8859-2
Kod: Zaznacz cały
javascript:(function(){ document.getElementsByTagName('textarea')[ 0].value=document.getElementsByTagName('textarea')[ 0].value.replace(/æ/g,'ć').replace(/Æ/g,'Ć').replace(/¼/g,'ź').replace( /¬/g,'Ź' ).replace(/¿/g,'ż').replace(/¯/g,'Ż').replace( /¶/g,'ś').replace(/¦/g,'Ś' ).replace(/ê/g,'ę').replace(/Ê/g,'Ę').replace(/ó/g,'ó').replace(/Ó/g,'Ó' ).replace(/¡/g,'Ą').replace(/³/g,'ł').replace(/£/g,'Ł').replace( /ñ/g,'ń').replace(/Ñ/g,'Ń').replace(/±/g,'ą' ); })();

Poprawiało kodowanie znaków w postach po jakiejś awarii - pewnie się nikomu nie przyda, ale można zobaczyć jak da się to zrobić...
Ostatnio zmieniony 17 sierpnia 2007, 17:10 przez Mirek, łącznie zmieniany 1 raz
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Mirek » 16 sierpnia 2007, 21:04

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6

(De)szyfrowanie

Oblicz skrót MD5() (z zaznaczenia, jeśli brak to spytaj)
Kod: Zaznacz cały
javascript:var hc=%220123456789abcdef%22,num=0; function getToHashString (promptString){ sq = null; if (document.selection && document.selection.createRange){ sq=document.selection.createRange().text;   } else if (document.getSelection) { sq = document.getSelection();  if (! (sq && sq.length))     {if(frames.length>1) {for(i=0;i<frames.length;i++) {sq=frames[i].document.getSelection();if(s)break;} } }  } if(! (sq && sq.length)) { sq = prompt(promptString,''); } return sq; }; function rhex(num){str=%22%22;for(j=0;j<=3;j++) str+=hc.charAt((num>>(j*8+4))&15) +hc.charAt((num>>(j*8))&15);return str;}function str2blks_MD5(str){nblk=((str.length+8)>>6)+1;blks=new Array(nblk*16);for(i=0;i<nblk*16;i++)blks[i]=0;for(i=0;i<str.length; i++)blks[i>>2]|=str.charCodeAt(i)<<((i%4)*8); blks[i>>2]|=128<<((i%4)*8); blks[nblk*16-2]=str.length*8;return blks;}function ad(x,y){var l=(x&65535)+(y&65535);var m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&65535);}function rol(num,cnt){return (num<<cnt)|(num>>>(32-cnt));}function cmn(q,a,b,x,s,t){return ad(rol(ad(ad(a,q),ad(x,t)),s),b);}function ff(a,b,c,d,x,s,t){return cmn((b&c)|((~b)&d),a,b,x,s,t);}function gg(a,b,c,d,x,s,t){return cmn((b&d)|(c&(~d)),a,b,x,s,t);}function hh(a,b,c,d,x,s,t){return cmn(b^c^d,a,b,x,s,t);}function ii(a,b,c,d,x,s,t){return cmn(c^(b|(~d)),a,b,x,s,t);}function calcMD5(str){x=str2blks_MD5(str);a=1732584193;b=-271733879; c=-1732584194;d=271733878;for(i=0;i<x.length;i+=16) {olda=a;oldb=b;oldc=c; oldd=d;a=ff(a,b,c,d,x[i+0],7,-680876936); d=ff(d,a,b,c,x[i+1],12,-389564586); c=ff(c,d,a,b,x[i+2],17,606105819);b=ff(b,c,d,a,x[i+3],22,-1044525330); a=ff(a,b,c,d,x[i+4],7,-176418897);d=ff(d,a,b,c,x[i+5],12,1200080426); c=ff(c,d,a,b,x[i+6],17,-1473231341);b=ff(b,c,d,a,x[i+7],22,-45705983); a=ff(a,b,c,d,x[i+8],7,1770035416);d=ff(d,a,b,c,x[i+9],12,-1958414417); c=ff(c,d,a,b,x[i+10],17,-42063);b=ff(b,c,d,a,x[i+11],22,-1990404162); a=ff(a,b,c,d,x[i+12],7,1804603682);d=ff(d,a,b,c,x[i+13],12,-40341101); c=ff(c,d,a,b,x[i+14],17,-1502002290);b=ff(b,c,d,a,x[i+15],22,1236535329); a=gg(a,b,c,d,x[i+1],5,-165796510);d=gg(d,a,b,c,x[i+6],9,-1069501632); c=gg(c,d,a,b,x[i+11],14,643717713);b=gg(b,c,d,a,x[i+0],20,-373897302); a=gg(a,b,c,d,x[i+5],5,-701558691);d=gg(d,a,b,c,x[i+10],9,38016083); c=gg(c,d,a,b,x[i+15],14,-660478335);b=gg(b,c,d,a,x[i+4],20,-405537848); a=gg(a,b,c,d,x[i+9],5,568446438);d=gg(d,a,b,c,x[i+14],9,-1019803690); c=gg(c,d,a,b,x[i+3],14,-187363961);b=gg(b,c,d,a,x[i+8],20,1163531501); a=gg(a,b,c,d,x[i+13],5,-1444681467);d=gg(d,a,b,c,x[i+2],9,-51403784); c=gg(c,d,a,b,x[i+7],14,1735328473);b=gg(b,c,d,a,x[i+12],20,-1926607734); a=hh(a,b,c,d,x[i+5],4,-378558);d=hh(d,a,b,c,x[i+8],11,-2022574463); c=hh(c,d,a,b,x[i+11],16,1839030562);b=hh(b,c,d,a,x[i+14],23,-35309556); a=hh(a,b,c,d,x[i+1],4,-1530992060);d=hh(d,a,b,c,x[i+4],11,1272893353); c=hh(c,d,a,b,x[i+7],16,-155497632);b=hh(b,c,d,a,x[i+10],23,-1094730640); a=hh(a,b,c,d,x[i+13],4,681279174);d=hh(d,a,b,c,x[i+0],11,-358537222); c=hh(c,d,a,b,x[i+3],16,-722521979);b=hh(b,c,d,a,x[i+6],23,76029189); a=hh(a,b,c,d,x[i+9],4,-640364487);d=hh(d,a,b,c,x[i+12],11,-421815835); c=hh(c,d,a,b,x[i+15],16,530742520);b=hh(b,c,d,a,x[i+2],23,-995338651); a=ii(a,b,c,d,x[i+0],6,-198630844);d=ii(d,a,b,c,x[i+7],10,1126891415); c=ii(c,d,a,b,x[i+14],15,-1416354905);b=ii(b,c,d,a,x[i+5],21,-57434055); a=ii(a,b,c,d,x[i+12],6,1700485571);d=ii(d,a,b,c,x[i+3],10,-1894986606); c=ii(c,d,a,b,x[i+10],15,-1051523);b=ii(b,c,d,a,x[i+1],21,-2054922799); a=ii(a,b,c,d,x[i+8],6,1873313359);d=ii(d,a,b,c,x[i+15],10,-30611744); c=ii(c,d,a,b,x[i+6],15,-1560198380);b=ii(b,c,d,a,x[i+13],21,1309151649); a=ii(a,b,c,d,x[i+4],6,-145523070);d=ii(d,a,b,c,x[i+11],10,-1120210379); c=ii(c,d,a,b,x[i+2],15,718787259);b=ii(b,c,d,a,x[i+9],21,-343485551); a=ad(a,olda);b=ad(b,oldb);c=ad(c,oldc);d=ad(d,oldd);}return rhex(a)+rhex(b)+rhex(c)+rhex(d);}hashString = getToHashString('Podaj string do zaszyfrowania (lub zaznacz słowo przed użyciem bookmarleta)'); if (hashString != null) { if (hashString.length) { void(prompt('Zaszyfrowany string:', calcMD5(hashString))); } }

Trochę zajęło mi pozjadanie Enterów i połapanie się w nawiasach z oryginalnego skryptu, ale się udało.

ROT13 (selected text)
Kod: Zaznacz cały
javascript:var c= 'abcdefghijklmnopqrstuvwxyzabcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM' ; var s=document.selection?document.selection.createRange( ).text:window.getSelection().toString(); var t='',i,x,p,m=1;for(i=0;i<s.length;++i){p=s.charAt(i);if(p=='[')m=0;if(p==']') m=1;x=c.indexOf(p);if(x<0||m==0)t=t+p;else t=t+c.charAt(x+13);}prompt('',t);

Można by dodać prompt() na wypadek braku zaznaczenia, tak jak zrobiłem to przy MD5;

Tyle na początek. Mam jeszcze trochę tego, ale z tych najczęściej korzystam lub są ciekawe. Zresztą na początku są linki i tam można znaleźć całe mnóstwo innych, a jak to za mało, to stworzyć własną :-)

Pozdrawiam,
Mirek
Ostatnio zmieniony 17 sierpnia 2007, 17:12 przez Mirek, łącznie zmieniany 1 raz
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Stef » 17 sierpnia 2007, 16:55

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070817 Firefox/2.0.0.6 Sulfur/1.0a1pre

a może opisałbyś to na wiki?
Czasami coś napiszę na stef.log
Stef
Moderator
 
Posty: 3469
Z nami od: 16 kwietnia 2004, 11:05

Postautor: Grzegorz » 12 września 2007, 15:12

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.8.1.6) Gecko/20070827 Ubuntu/7.10 (gutsy) Firefox/2.0.0.6

1) Pobierz Fakty (w rozmiarze 384×288 - ok.60MB):
Kod: Zaznacz cały
javascript:void(document.location='http://www.tvn24.pl/_mmv/' + _FaktyPlayer[0].flash_vars.split('&')[2].substring(2) + ',5.flv');


2) Pobierz Fakty (w rozmiarze 192×144 - ok.30MB):
Kod: Zaznacz cały
javascript:void(document.location='http://www.tvn24.pl/_mmv/' + _FaktyPlayer[0].flash_vars.split('&')[2].substring(2) + ',6.flv');
GnuPG. Podpisuję własne wypowiedzi. | TrueCrypt. Ufam kryptografii, nie państwu. | Tor. Dbam o swoją prywatność. | OTR. Moje rozmowy nie są podsłuchiwane.

Załóż konto lub kup domenę WWW z linka polecającego: http://www.hekko.pl/?ref=34295
Grzegorz
Moderator
 
Posty: 7494
Z nami od: 15 kwietnia 2007, 12:33

Postautor: Mirek » 19 czerwca 2008, 21:15

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

Odzyskaj menu kontekstowe / zezwól na "prawoklik":
Kod: Zaznacz cały
javascript:(function() { function R(a){ona = %22on%22+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R(%22contextmenu%22); R(%22click%22); R(%22mousedown%22); R(%22mouseup%22); })()


Niektóre strony blokują menu kontekstowe wywoływane przez kliknięcie prawym przyciskiem myszy - powyższa skryptozakładka powinna je odblokować.
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Stef » 20 czerwca 2008, 16:59

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008062000 Firefox/3.0 Sulfur/2.0b2pre

Mirek [PL] pisze:Niektóre strony blokują menu kontekstowe wywoływane przez kliknięcie prawym przyciskiem myszy - powyższa skryptozakładka powinna je odblokować.

W zaawansowanych ustawieniach JavaScript jest do tego klikalna opcja.. ;-)
Czasami coś napiszę na stef.log
Stef
Moderator
 
Posty: 3469
Z nami od: 16 kwietnia 2004, 11:05

Postautor: Mirek » 20 czerwca 2008, 17:06

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

Przy czym na niektórych stronach może nam odpowiadać to, że strona modyfikuje menu (np. przy edytorach WYSIWYG), a na innych nie - i za pewne w części przypadków wygodniej jest odblokować na stałe taką możliwość, a ze skryptozakładki korzystać tylko, gdy takie coś na jakiejś stronie jest niepożądane (bo to raczej rzadkie zjawisko).
Ale przyznam się, że nie zamieściłem tej skryptozakładki wcześniej, ponieważ dokładnie tak samo pomyślałem jak Ty, Stef :-)
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Stef » 20 czerwca 2008, 17:10

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008062000 Firefox/3.0 Sulfur/2.0b2pre

Edytory WYSIWYG to zuo ;-)
Czasami coś napiszę na stef.log
Stef
Moderator
 
Posty: 3469
Z nami od: 16 kwietnia 2004, 11:05

Postautor: Tomek » 20 czerwca 2008, 20:18

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.9) Gecko/2008061015 Firefox/3.0

@stef - ale czasami są potrzebne :) Nie każdy zna się na html żeby dodać treść do bloga czy strony - a FCk czy TinyMCE może działać nie jako zuo :)
"Mym sojusznikiem jest Moc, i potężnym sojusznikiem ona jest." -- Mistrz Yoda
Tomek
Moderator
 
Posty: 9015
Z nami od: 19 sierpnia 2004, 06:52
Lokalizacja: pewna śliczna kotlina

Postautor: Mirek » 29 lipca 2008, 00:35

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16

Dziś wielka mega kumulacja w Dużym Lotku - więc nie mogłem się powstrzymać i stworzyłem skryptozakładkę i na taką okazję:
Kod: Zaznacz cały
javascript:function porownaj(a, b){  return(a-b);} function losuj(){ return (Math.round(Math.abs(Math.sin(new Date().getTime())*1000000)) % 49 +1);} var l = new Array(); var wyn = new Array(); l[0]=0; l[1] = losuj(); l[2] = losuj(); while(l[2]==l[1])    l[2] = losuj();l[3] = losuj(); while(l[3]==l[1] || l[3]==l[2])    l[3] = losuj();l[4] = losuj();while(l[4]==l[1] || l[4]==l[2] || l[4]==l[3])    l[4] = losuj();l[5] = losuj();while(l[5]==l[1] || l[5]==l[2] || l[5]==l[3] || l[5]==l[4])    l[5] = losuj();l[6] = losuj();while(l[6]==l[1] || l[6]==l[2] || l[6]==l[3] || l[6]==l[4] || l[6]==l[5])    l[6] = losuj();l.sort(porownaj);for(i=0;i<6;++i)  wyn[i]=l[i+1];prompt("Byc moze wygrasz obstawiajac: ", wyn.toString()); void 0;


A żeby udowodnić (lub obalić) moc skryptozakładek, taki POC-PIC (Proof-Of-Concept Picture) ;-)

Obrazek
;-]
Nie mam nic przeciwko obstawieniu "moich" liczb, bo osobiście nie gram (przynajmniej dziś...) :P

Pozdrawiam,
Mirek
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Mirek » 09 sierpnia 2008, 21:18

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16

Generator zakładek zabezpieczonych hasłem

Zainspirowany po części jednym z postów na forum stworzyłem skryptozakładkę, która tworzy dla podanej strony (domyślnie aktualnie otwartej) skryptozakładkę, zawierającą zaszyfrowany (AES 256bit) link przy pomocy uprzednio podanego hasła. Czyli aby otworzyć stronę należy podać najpierw hasło użyte podczas generowania skryptozakładki.
Skorzystałem z implementacji algorytmu AES w javascripcie autorstwa Chrisa Venessa ( http://www.movable-type.co.uk/scripts/aes.html ).
A oto moja skryptozakładka:
Kod: Zaznacz cały
javascript:var b64 %3D %27ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B%2F%3D%27%3B%0D%0A String.prototype.encodeBase64 %3D function%28utf8encode%29 %7B%0D%0A  utf8encode %3D  %28typeof utf8encode %3D%3D %27undefined%27%29 %3F false %3A utf8encode%3B%0D%0A  var o1%2C o2%2C o3%2C bits%2C h1%2C h2%2C h3%2C h4%2C e%3D%5B%5D%2C pad %3D %27%27%2C c%2C plain%2C coded%3B%0D%0A%0D%0A  plain %3D utf8encode %3F this.encodeUTF8%28%29 %3A this%3B%0D%0A%0D%0A  c %3D plain.length %25 3%3B%0D%0A  if %28c %3E 0%29 %7B while %28c%2B%2B %3C 3%29 %7B pad %2B%3D %27%3D%27%3B plain %2B%3D %27%5C0%27%3B %7D %7D%0D%0A%0D%0A  for %28c%3D0%3B c%3Cplain.length%3B c%2B%3D3%29 %7B%0D%0A    o1 %3D plain.charCodeAt%28c%29%3B%0D%0A    o2 %3D plain.charCodeAt%28c%2B1%29%3B%0D%0A    o3 %3D plain.charCodeAt%28c%2B2%29%3B%0D%0A%0D%0A    bits %3D o1%3C%3C16 %7C o2%3C%3C8 %7C o3%3B%0D%0A%0D%0A    h1 %3D bits%3E%3E18 %26 0x3f%3B%0D%0A    h2 %3D bits%3E%3E12 %26 0x3f%3B%0D%0A    h3 %3D bits%3E%3E6 %26 0x3f%3B%0D%0A    h4 %3D bits %26 0x3f%3B%0D%0A%0D%0A    e%5Bc%2F3%5D %3D b64.charAt%28h1%29 %2B b64.charAt%28h2%29 %2B b64.charAt%28h3%29 %2B b64.charAt%28h4%29%3B%0D%0A  %7D%0D%0A  coded %3D e.join%28%27%27%29%3B%0D%0A%0D%0A  coded %3D coded.slice%280%2C coded.length-pad.length%29 %2B pad%3B%0D%0A%0D%0A  return coded%3B%0D%0A%7D%0D%0A%0D%0AString.prototype.decodeBase64 %3D function%28utf8decode%29 %7B%0D%0A  utf8decode %3D  %28typeof utf8decode %3D%3D %27undefined%27%29 %3F false %3A utf8decode%3B%0D%0A  var o1%2C o2%2C o3%2C h1%2C h2%2C h3%2C h4%2C bits%2C d%3D%5B%5D%2C plain%2C coded%3B%0D%0A%0D%0A  coded %3D utf8decode %3F this.decodeUTF8%28%29 %3A this%3B%0D%0A%0D%0A  for %28var c%3D0%3B c%3Ccoded.length%3B c%2B%3D4%29 %7B%0D%0A    h1 %3D b64.indexOf%28coded.charAt%28c%29%29%3B%0D%0A    h2 %3D b64.indexOf%28coded.charAt%28c%2B1%29%29%3B%0D%0A    h3 %3D b64.indexOf%28coded.charAt%28c%2B2%29%29%3B%0D%0A    h4 %3D b64.indexOf%28coded.charAt%28c%2B3%29%29%3B%0D%0A%0D%0A    bits %3D h1%3C%3C18 %7C h2%3C%3C12 %7C h3%3C%3C6 %7C h4%3B%0D%0A%0D%0A    o1 %3D bits%3E%3E%3E16 %26 0xff%3B%0D%0A    o2 %3D bits%3E%3E%3E8 %26 0xff%3B%0D%0A    o3 %3D bits %26 0xff%3B%0D%0A%0D%0A    d%5Bc%2F4%5D %3D String.fromCharCode%28o1%2C o2%2C o3%29%3B%0D%0A%0D%0A    if %28h4 %3D%3D 0x40%29 d%5Bc%2F4%5D %3D String.fromCharCode%28o1%2C o2%29%3B%0D%0A    if %28h3 %3D%3D 0x40%29 d%5Bc%2F4%5D %3D String.fromCharCode%28o1%29%3B%0D%0A  %7D%0D%0A  plain %3D d.join%28%27%27%29%3B%0D%0A%0D%0A  return utf8decode %3F plain.decodeUTF8%28%29 %3A plain%3B%0D%0A%7D%0D%0A%0D%0AString.prototype.encodeUTF8 %3D function%28%29 %7B%0D%0A  var str %3D this.replace%28%0D%0A      %2F%5B%5Cu0080-%5Cu07ff%5D%2Fg%2C%0D%0A      function%28c%29 %7B%0D%0A        var cc %3D c.charCodeAt%280%29%3B%0D%0A        return String.fromCharCode%280xc0 %7C cc%3E%3E6%2C 0x80 %7C cc%260x3f%29%3B %7D%0D%0A    %29%3B%0D%0A  str %3D str.replace%28%0D%0A      %2F%5B%5Cu0800-%5Cuffff%5D%2Fg%2C%0D%0A      function%28c%29 %7B%0D%0A        var cc %3D c.charCodeAt%280%29%3B%0D%0A        return String.fromCharCode%280xe0 %7C cc%3E%3E12%2C 0x80 %7C cc%3E%3E6%260x3F%2C 0x80 %7C cc%260x3f%29%3B %7D%0D%0A    %29%3B%0D%0A  return str%3B%0D%0A%7D%0D%0A%0D%0AString.prototype.decodeUTF8 %3D function%28%29 %7B%0D%0A  var str %3D this.replace%28%0D%0A      %2F%5B%5Cu00c0-%5Cu00df%5D%5B%5Cu0080-%5Cu00bf%5D%2Fg%2C%0D%0A      function%28c%29 %7B%0D%0A        var cc %3D %28c.charCodeAt%280%29%260x1f%29%3C%3C6 %7C c.charCodeAt%281%29%260x3f%3B%0D%0A        return String.fromCharCode%28cc%29%3B %7D%0D%0A    %29%3B%0D%0A  str %3D str.replace%28%0D%0A      %2F%5B%5Cu00e0-%5Cu00ef%5D%5B%5Cu0080-%5Cu00bf%5D%5B%5Cu0080-%5Cu00bf%5D%2Fg%2C%0D%0A      function%28c%29 %7B%0D%0A        var cc %3D %28%28c.charCodeAt%280%29%260x0f%29%3C%3C12%29 %7C %28%28c.charCodeAt%281%29%260x3f%29%3C%3C6%29 %7C %28 c.charCodeAt%282%29%260x3f%29%3B%0D%0A        return String.fromCharCode%28cc%29%3B %7D%0D%0A    %29%3B%0D%0A  return str%3B%0D%0A%7D%0D%0A%0D%0Afunction byteArrayToHexStr%28b%29 %7B%0D%0A  var s %3D %27%27%3B%0D%0A  for %28var i%3D0%3B i%3Cb.length%3B i%2B%2B%29 s %2B%3D b%5Bi%5D.toString%2816%29 %2B %27 %27%3B%0D%0A  return s%3B%0D%0A%7D%0D%0A%0D%0AString.prototype.toCodes %3D function%28%29 %7B%0D%0A  if %28this.length %3D%3D 0%29 return %27%27%3B%0D%0A  var arr %3D this.split%28%27%27%29%3B%0D%0A  for %28a in arr%29 arr%5Ba%5D %3D arr%5Ba%5D.charCodeAt%280%29%3B%0D%0A  return arr.join%28%27%3A%27%29%3B%0D%0A%7D%0D%0Afunction Cipher%28input%2C w%29 %7B%0D%0A  var Nb %3D 4%3B%0D%0A  var Nr %3D w.length%2FNb - 1%3B%0D%0A%0D%0A  var state %3D %5B%5B%5D%2C%5B%5D%2C%5B%5D%2C%5B%5D%5D%3B%0D%0A  for %28var i%3D0%3B i%3C4%2ANb%3B i%2B%2B%29 state%5Bi%254%5D%5BMath.floor%28i%2F4%29%5D %3D input%5Bi%5D%3B%0D%0A%0D%0A  state %3D AddRoundKey%28state%2C w%2C 0%2C Nb%29%3B%0D%0A%0D%0A  for %28var round%3D1%3B round%3CNr%3B round%2B%2B%29 %7B%0D%0A    state %3D SubBytes%28state%2C Nb%29%3B%0D%0A    state %3D ShiftRows%28state%2C Nb%29%3B%0D%0A    state %3D MixColumns%28state%2C Nb%29%3B%0D%0A    state %3D AddRoundKey%28state%2C w%2C round%2C Nb%29%3B%0D%0A  %7D%0D%0A%0D%0A  state %3D SubBytes%28state%2C Nb%29%3B%0D%0A  state %3D ShiftRows%28state%2C Nb%29%3B%0D%0A  state %3D AddRoundKey%28state%2C w%2C Nr%2C Nb%29%3B%0D%0A%0D%0A  var output %3D new Array%284%2ANb%29%3B%0D%0A  for %28var i%3D0%3B i%3C4%2ANb%3B i%2B%2B%29 output%5Bi%5D %3D state%5Bi%254%5D%5BMath.floor%28i%2F4%29%5D%3B%0D%0A  return output%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction SubBytes%28s%2C Nb%29 %7B%0D%0A  for %28var r%3D0%3B r%3C4%3B r%2B%2B%29 %7B%0D%0A    for %28var c%3D0%3B c%3CNb%3B c%2B%2B%29 s%5Br%5D%5Bc%5D %3D Sbox%5Bs%5Br%5D%5Bc%5D%5D%3B%0D%0A  %7D%0D%0A  return s%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction ShiftRows%28s%2C Nb%29 %7B%0D%0A  var t %3D new Array%284%29%3B%0D%0A  for %28var r%3D1%3B r%3C4%3B r%2B%2B%29 %7B%0D%0A    for %28var c%3D0%3B c%3C4%3B c%2B%2B%29 t%5Bc%5D %3D s%5Br%5D%5B%28c%2Br%29%25Nb%5D%3B%0D%0A    for %28var c%3D0%3B c%3C4%3B c%2B%2B%29 s%5Br%5D%5Bc%5D %3D t%5Bc%5D%3B%0D%0A  %7D%0D%0A  return s%3B%0D%0A%7D%0D%0A%0D%0Afunction MixColumns%28s%2C Nb%29 %7B%0D%0A  for %28var c%3D0%3B c%3C4%3B c%2B%2B%29 %7B%0D%0A    var a %3D new Array%284%29%3B%0D%0A    var b %3D new Array%284%29%3B%0D%0A    for %28var i%3D0%3B i%3C4%3B i%2B%2B%29 %7B%0D%0A      a%5Bi%5D %3D s%5Bi%5D%5Bc%5D%3B%0D%0A      b%5Bi%5D %3D s%5Bi%5D%5Bc%5D%260x80 %3F s%5Bi%5D%5Bc%5D%3C%3C1 %5E 0x011b %3A s%5Bi%5D%5Bc%5D%3C%3C1%3B%0D%0A    %7D%0D%0A    s%5B0%5D%5Bc%5D %3D b%5B0%5D %5E a%5B1%5D %5E b%5B1%5D %5E a%5B2%5D %5E a%5B3%5D%3B%0D%0A    s%5B1%5D%5Bc%5D %3D a%5B0%5D %5E b%5B1%5D %5E a%5B2%5D %5E b%5B2%5D %5E a%5B3%5D%3B%0D%0A    s%5B2%5D%5Bc%5D %3D a%5B0%5D %5E a%5B1%5D %5E b%5B2%5D %5E a%5B3%5D %5E b%5B3%5D%3B%0D%0A    s%5B3%5D%5Bc%5D %3D a%5B0%5D %5E b%5B0%5D %5E a%5B1%5D %5E a%5B2%5D %5E b%5B3%5D%3B%0D%0A  %7D%0D%0A  return s%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction AddRoundKey%28state%2C w%2C rnd%2C Nb%29 %7B%0D%0A  for %28var r%3D0%3B r%3C4%3B r%2B%2B%29 %7B%0D%0A    for %28var c%3D0%3B c%3CNb%3B c%2B%2B%29 state%5Br%5D%5Bc%5D %5E%3D w%5Brnd%2A4%2Bc%5D%5Br%5D%3B%0D%0A  %7D%0D%0A  return state%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction KeyExpansion%28key%29 %7B%0D%0A  var Nb %3D 4%3B%0D%0A  var Nk %3D key.length%2F4%0D%0A  var Nr %3D Nk %2B 6%3B%0D%0A%0D%0A  var w %3D new Array%28Nb%2A%28Nr%2B1%29%29%3B%0D%0A  var temp %3D new Array%284%29%3B%0D%0A%0D%0A  for %28var i%3D0%3B i%3CNk%3B i%2B%2B%29 %7B%0D%0A    var r %3D %5Bkey%5B4%2Ai%5D%2C key%5B4%2Ai%2B1%5D%2C key%5B4%2Ai%2B2%5D%2C key%5B4%2Ai%2B3%5D%5D%3B%0D%0A    w%5Bi%5D %3D r%3B%0D%0A  %7D%0D%0A%0D%0A  for %28var i%3DNk%3B i%3C%28Nb%2A%28Nr%2B1%29%29%3B i%2B%2B%29 %7B%0D%0A    w%5Bi%5D %3D new Array%284%29%3B%0D%0A    for %28var t%3D0%3B t%3C4%3B t%2B%2B%29 temp%5Bt%5D %3D w%5Bi-1%5D%5Bt%5D%3B%0D%0A    if %28i %25 Nk %3D%3D 0%29 %7B%0D%0A      temp %3D SubWord%28RotWord%28temp%29%29%3B%0D%0A      for %28var t%3D0%3B t%3C4%3B t%2B%2B%29 temp%5Bt%5D %5E%3D Rcon%5Bi%2FNk%5D%5Bt%5D%3B%0D%0A    %7D else if %28Nk %3E 6 %26%26 i%25Nk %3D%3D 4%29 %7B%0D%0A      temp %3D SubWord%28temp%29%3B%0D%0A    %7D%0D%0A    for %28var t%3D0%3B t%3C4%3B t%2B%2B%29 w%5Bi%5D%5Bt%5D %3D w%5Bi-Nk%5D%5Bt%5D %5E temp%5Bt%5D%3B%0D%0A  %7D%0D%0A%0D%0A  return w%3B%0D%0A%7D%0D%0A%0D%0Afunction SubWord%28w%29 %7B%0D%0A  for %28var i%3D0%3B i%3C4%3B i%2B%2B%29 w%5Bi%5D %3D Sbox%5Bw%5Bi%5D%5D%3B%0D%0A  return w%3B%0D%0A%7D%0D%0A%0D%0Afunction RotWord%28w%29 %7B%0D%0A  var tmp %3D w%5B0%5D%3B%0D%0A  for %28var i%3D0%3B i%3C3%3B i%2B%2B%29 w%5Bi%5D %3D w%5Bi%2B1%5D%3B%0D%0A  w%5B3%5D %3D tmp%3B%0D%0A  return w%3B%0D%0A%7D%0D%0A%0D%0Avar Sbox %3D  %5B0x63%2C 0x7c%2C 0x77%2C 0x7b%2C 0xf2%2C 0x6b%2C 0x6f%2C 0xc5%2C 0x30%2C 0x01%2C 0x67%2C 0x2b%2C 0xfe%2C 0xd7%2C 0xab%2C 0x76%2C%0D%0A             0xca%2C 0x82%2C 0xc9%2C 0x7d%2C 0xfa%2C 0x59%2C 0x47%2C 0xf0%2C 0xad%2C 0xd4%2C 0xa2%2C 0xaf%2C 0x9c%2C 0xa4%2C 0x72%2C 0xc0%2C%0D%0A             0xb7%2C 0xfd%2C 0x93%2C 0x26%2C 0x36%2C 0x3f%2C 0xf7%2C 0xcc%2C 0x34%2C 0xa5%2C 0xe5%2C 0xf1%2C 0x71%2C 0xd8%2C 0x31%2C 0x15%2C%0D%0A             0x04%2C 0xc7%2C 0x23%2C 0xc3%2C 0x18%2C 0x96%2C 0x05%2C 0x9a%2C 0x07%2C 0x12%2C 0x80%2C 0xe2%2C 0xeb%2C 0x27%2C 0xb2%2C 0x75%2C%0D%0A             0x09%2C 0x83%2C 0x2c%2C 0x1a%2C 0x1b%2C 0x6e%2C 0x5a%2C 0xa0%2C 0x52%2C 0x3b%2C 0xd6%2C 0xb3%2C 0x29%2C 0xe3%2C 0x2f%2C 0x84%2C%0D%0A             0x53%2C 0xd1%2C 0x00%2C 0xed%2C 0x20%2C 0xfc%2C 0xb1%2C 0x5b%2C 0x6a%2C 0xcb%2C 0xbe%2C 0x39%2C 0x4a%2C 0x4c%2C 0x58%2C 0xcf%2C%0D%0A             0xd0%2C 0xef%2C 0xaa%2C 0xfb%2C 0x43%2C 0x4d%2C 0x33%2C 0x85%2C 0x45%2C 0xf9%2C 0x02%2C 0x7f%2C 0x50%2C 0x3c%2C 0x9f%2C 0xa8%2C%0D%0A             0x51%2C 0xa3%2C 0x40%2C 0x8f%2C 0x92%2C 0x9d%2C 0x38%2C 0xf5%2C 0xbc%2C 0xb6%2C 0xda%2C 0x21%2C 0x10%2C 0xff%2C 0xf3%2C 0xd2%2C%0D%0A             0xcd%2C 0x0c%2C 0x13%2C 0xec%2C 0x5f%2C 0x97%2C 0x44%2C 0x17%2C 0xc4%2C 0xa7%2C 0x7e%2C 0x3d%2C 0x64%2C 0x5d%2C 0x19%2C 0x73%2C%0D%0A             0x60%2C 0x81%2C 0x4f%2C 0xdc%2C 0x22%2C 0x2a%2C 0x90%2C 0x88%2C 0x46%2C 0xee%2C 0xb8%2C 0x14%2C 0xde%2C 0x5e%2C 0x0b%2C 0xdb%2C%0D%0A             0xe0%2C 0x32%2C 0x3a%2C 0x0a%2C 0x49%2C 0x06%2C 0x24%2C 0x5c%2C 0xc2%2C 0xd3%2C 0xac%2C 0x62%2C 0x91%2C 0x95%2C 0xe4%2C 0x79%2C%0D%0A             0xe7%2C 0xc8%2C 0x37%2C 0x6d%2C 0x8d%2C 0xd5%2C 0x4e%2C 0xa9%2C 0x6c%2C 0x56%2C 0xf4%2C 0xea%2C 0x65%2C 0x7a%2C 0xae%2C 0x08%2C%0D%0A             0xba%2C 0x78%2C 0x25%2C 0x2e%2C 0x1c%2C 0xa6%2C 0xb4%2C 0xc6%2C 0xe8%2C 0xdd%2C 0x74%2C 0x1f%2C 0x4b%2C 0xbd%2C 0x8b%2C 0x8a%2C%0D%0A             0x70%2C 0x3e%2C 0xb5%2C 0x66%2C 0x48%2C 0x03%2C 0xf6%2C 0x0e%2C 0x61%2C 0x35%2C 0x57%2C 0xb9%2C 0x86%2C 0xc1%2C 0x1d%2C 0x9e%2C%0D%0A             0xe1%2C 0xf8%2C 0x98%2C 0x11%2C 0x69%2C 0xd9%2C 0x8e%2C 0x94%2C 0x9b%2C 0x1e%2C 0x87%2C 0xe9%2C 0xce%2C 0x55%2C 0x28%2C 0xdf%2C%0D%0A             0x8c%2C 0xa1%2C 0x89%2C 0x0d%2C 0xbf%2C 0xe6%2C 0x42%2C 0x68%2C 0x41%2C 0x99%2C 0x2d%2C 0x0f%2C 0xb0%2C 0x54%2C 0xbb%2C 0x16%5D%3B%0D%0A%0D%0Avar Rcon %3D %5B %5B0x00%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x01%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x02%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x04%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x08%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x10%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x20%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x40%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x80%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x1b%2C 0x00%2C 0x00%2C 0x00%5D%2C%0D%0A             %5B0x36%2C 0x00%2C 0x00%2C 0x00%5D %5D%3B%0D%0A%0D%0Afunction AESEncryptCtr%28plaintext%2C password%2C nBits%29 %7B%0D%0A  var blockSize %3D 16%3B%0D%0A  if %28%21%28nBits%3D%3D128 %7C%7C nBits%3D%3D192 %7C%7C nBits%3D%3D256%29%29 return %27%27%3B%0D%0A  plaintext %3D plaintext.encodeUTF8%28%29%3B%0D%0A  password %3D password.encodeUTF8%28%29%3B%0D%0A%0D%0A  var nBytes %3D nBits%2F8%3B%0D%0A  var pwBytes %3D new Array%28nBytes%29%3B%0D%0A  for %28var i%3D0%3B i%3CnBytes%3B i%2B%2B%29 pwBytes%5Bi%5D %3D password.charCodeAt%28i%29%3B%0D%0A  var key %3D Cipher%28pwBytes%2C KeyExpansion%28pwBytes%29%29%3B%0D%0A  key %3D key.concat%28key.slice%280%2C nBytes-16%29%29%3B%0D%0A%0D%0A  var counterBlock %3D new Array%28blockSize%29%3B%0D%0A  var nonce %3D %28new Date%28%29%29.getTime%28%29%3B%0D%0A  var nonceSec %3D Math.floor%28nonce%2F1000%29%3B%0D%0A  var nonceMs %3D nonce%251000%3B%0D%0A  for %28var i%3D0%3B i%3C4%3B i%2B%2B%29 counterBlock%5Bi%5D %3D %28nonceSec %3E%3E%3E i%2A8%29 %26 0xff%3B%0D%0A  for %28var i%3D0%3B i%3C4%3B i%2B%2B%29 counterBlock%5Bi%2B4%5D %3D nonceMs %26 0xff%3B%0D%0A  var ctrTxt %3D %27%27%3B%0D%0A  for %28var i%3D0%3B i%3C8%3B i%2B%2B%29 ctrTxt %2B%3D String.fromCharCode%28counterBlock%5Bi%5D%29%3B%0D%0A%0D%0A  var keySchedule %3D KeyExpansion%28key%29%3B%0D%0A%0D%0A  var blockCount %3D Math.ceil%28plaintext.length%2FblockSize%29%3B%0D%0A  var ciphertxt %3D new Array%28blockCount%29%3B%0D%0A%0D%0A  for %28var b%3D0%3B b%3CblockCount%3B b%2B%2B%29 %7B%0D%0A    for %28var c%3D0%3B c%3C4%3B c%2B%2B%29 counterBlock%5B15-c%5D %3D %28b %3E%3E%3E c%2A8%29 %26 0xff%3B%0D%0A    for %28var c%3D0%3B c%3C4%3B c%2B%2B%29 counterBlock%5B15-c-4%5D %3D %28b%2F0x100000000 %3E%3E%3E c%2A8%29%0D%0A%0D%0A    var cipherCntr %3D Cipher%28counterBlock%2C keySchedule%29%3B%0D%0A%0D%0A    var blockLength %3D b%3CblockCount-1 %3F blockSize %3A %28plaintext.length-1%29%25blockSize%2B1%3B%0D%0A    var cipherChar %3D new Array%28blockLength%29%3B%0D%0A%0D%0A    for %28var i%3D0%3B i%3CblockLength%3B i%2B%2B%29 %7B%0D%0A      cipherChar%5Bi%5D %3D cipherCntr%5Bi%5D %5E plaintext.charCodeAt%28b%2AblockSize%2Bi%29%3B%0D%0A      cipherChar%5Bi%5D %3D String.fromCharCode%28cipherChar%5Bi%5D%29%3B%0D%0A    %7D%0D%0A    ciphertxt%5Bb%5D %3D cipherChar.join%28%27%27%29%3B%0D%0A  %7D%0D%0A%0D%0A  var ciphertext %3D ctrTxt %2B ciphertxt.join%28%27%27%29%3B%0D%0A  ciphertext %3D ciphertext.encodeBase64%28%29%3B%0D%0A%0D%0A  return ciphertext%3B%0D%0A%7D%0D%0Aplainlink %3D prompt%28%27Adres zakladki%3A%27%2C document.location%29%3B%0D%0Alinktitle %3D prompt%28%27Tytul zakladki%3A%27%2C document.title%29%3B%0D%0Apasswd %3D prompt%28%27Haslo%3A%27%2C %27abcd1234%21%3F%27%29%3B%0D%0Acipherlink %3D AESEncryptCtr%28%27%3C--%27%2Bplainlink%2B%27--%3E%27%2C passwd%2C 256%29%3B%0D%0Abookmarklet%3D%22javascript%3Avar b64 %253D %2527ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%252B%252F%253D%2527%253B  String.prototype.encodeBase64 %253D function%2528utf8encode%2529 %257B%250D%250A  utf8encode %253D  %2528typeof utf8encode %253D%253D %2527undefined%2527%2529 %253F false %253A utf8encode%253B%250D%250A  var o1%252C o2%252C o3%252C bits%252C h1%252C h2%252C h3%252C h4%252C e%253D%255B%255D%252C pad %253D %2527%2527%252C c%252C plain%252C coded%253B%250D%250A%250D%250A  plain %253D utf8encode %253F this.encodeUTF8%2528%2529 %253A this%253B%250D%250A%250D%250A  c %253D plain.length %2525 3%253B%250D%250A  if %2528c %253E 0%2529 %257B while %2528c%252B%252B %253C 3%2529 %257B pad %252B%253D %2527%253D%2527%253B plain %252B%253D %2527%255C0%2527%253B %257D %257D%250D%250A%250D%250A  for %2528c%253D0%253B c%253Cplain.length%253B c%252B%253D3%2529 %257B%250D%250A    o1 %253D plain.charCodeAt%2528c%2529%253B%250D%250A    o2 %253D plain.charCodeAt%2528c%252B1%2529%253B%250D%250A    o3 %253D plain.charCodeAt%2528c%252B2%2529%253B%250D%250A%250D%250A    bits %253D o1%253C%253C16 %257C o2%253C%253C8 %257C o3%253B%250D%250A%250D%250A    h1 %253D bits%253E%253E18 %2526 0x3f%253B%250D%250A    h2 %253D bits%253E%253E12 %2526 0x3f%253B%250D%250A    h3 %253D bits%253E%253E6 %2526 0x3f%253B%250D%250A    h4 %253D bits %2526 0x3f%253B%250D%250A%250D%250A    e%255Bc%252F3%255D %253D b64.charAt%2528h1%2529 %252B b64.charAt%2528h2%2529 %252B b64.charAt%2528h3%2529 %252B b64.charAt%2528h4%2529%253B%250D%250A  %257D%250D%250A  coded %253D e.join%2528%2527%2527%2529%253B%250D%250A%250D%250A  coded %253D coded.slice%25280%252C coded.length-pad.length%2529 %252B pad%253B%250D%250A%250D%250A  return coded%253B%250D%250A%257D%250D%250A%250D%250AString.prototype.decodeBase64 %253D function%2528utf8decode%2529 %257B%250D%250A  utf8decode %253D  %2528typeof utf8decode %253D%253D %2527undefined%2527%2529 %253F false %253A utf8decode%253B%250D%250A  var o1%252C o2%252C o3%252C h1%252C h2%252C h3%252C h4%252C bits%252C d%253D%255B%255D%252C plain%252C coded%253B%250D%250A%250D%250A  coded %253D utf8decode %253F this.decodeUTF8%2528%2529 %253A this%253B%250D%250A%250D%250A  for %2528var c%253D0%253B c%253Ccoded.length%253B c%252B%253D4%2529 %257B%250D%250A    h1 %253D b64.indexOf%2528coded.charAt%2528c%2529%2529%253B%250D%250A    h2 %253D b64.indexOf%2528coded.charAt%2528c%252B1%2529%2529%253B%250D%250A    h3 %253D b64.indexOf%2528coded.charAt%2528c%252B2%2529%2529%253B%250D%250A    h4 %253D b64.indexOf%2528coded.charAt%2528c%252B3%2529%2529%253B%250D%250A%250D%250A    bits %253D h1%253C%253C18 %257C h2%253C%253C12 %257C h3%253C%253C6 %257C h4%253B%250D%250A%250D%250A    o1 %253D bits%253E%253E%253E16 %2526 0xff%253B%250D%250A    o2 %253D bits%253E%253E%253E8 %2526 0xff%253B%250D%250A    o3 %253D bits %2526 0xff%253B%250D%250A%250D%250A    d%255Bc%252F4%255D %253D String.fromCharCode%2528o1%252C o2%252C o3%2529%253B%250D%250A%250D%250A    if %2528h4 %253D%253D 0x40%2529 d%255Bc%252F4%255D %253D String.fromCharCode%2528o1%252C o2%2529%253B%250D%250A    if %2528h3 %253D%253D 0x40%2529 d%255Bc%252F4%255D %253D String.fromCharCode%2528o1%2529%253B%250D%250A  %257D%250D%250A  plain %253D d.join%2528%2527%2527%2529%253B%250D%250A%250D%250A  return utf8decode %253F plain.decodeUTF8%2528%2529 %253A plain%253B%250D%250A%257D%250D%250A%250D%250AString.prototype.encodeUTF8 %253D function%2528%2529 %257B%250D%250A  var str %253D this.replace%2528%250D%250A      %252F%255B%255Cu0080-%255Cu07ff%255D%252Fg%252C%250D%250A      function%2528c%2529 %257B%250D%250A        var cc %253D c.charCodeAt%25280%2529%253B%250D%250A        return String.fromCharCode%25280xc0 %257C cc%253E%253E6%252C 0x80 %257C cc%25260x3f%2529%253B %257D%250D%250A    %2529%253B%250D%250A  str %253D str.replace%2528%250D%250A      %252F%255B%255Cu0800-%255Cuffff%255D%252Fg%252C%250D%250A      function%2528c%2529 %257B%250D%250A        var cc %253D c.charCodeAt%25280%2529%253B%250D%250A        return String.fromCharCode%25280xe0 %257C cc%253E%253E12%252C 0x80 %257C cc%253E%253E6%25260x3F%252C 0x80 %257C cc%25260x3f%2529%253B %257D%250D%250A    %2529%253B%250D%250A  return str%253B%250D%250A%257D%250D%250A%250D%250AString.prototype.decodeUTF8 %253D function%2528%2529 %257B%250D%250A  var str %253D this.replace%2528%250D%250A      %252F%255B%255Cu00c0-%255Cu00df%255D%255B%255Cu0080-%255Cu00bf%255D%252Fg%252C%250D%250A      function%2528c%2529 %257B%250D%250A        var cc %253D %2528c.charCodeAt%25280%2529%25260x1f%2529%253C%253C6 %257C c.charCodeAt%25281%2529%25260x3f%253B%250D%250A        return String.fromCharCode%2528cc%2529%253B %257D%250D%250A    %2529%253B%250D%250A  str %253D str.replace%2528%250D%250A      %252F%255B%255Cu00e0-%255Cu00ef%255D%255B%255Cu0080-%255Cu00bf%255D%255B%255Cu0080-%255Cu00bf%255D%252Fg%252C function%2528c%2529 %257B%250D%250A        var cc %253D %2528%2528c.charCodeAt%25280%2529%25260x0f%2529%253C%253C12%2529 %257C %2528%2528c.charCodeAt%25281%2529%25260x3f%2529%253C%253C6%2529 %257C %2528 c.charCodeAt%25282%2529%25260x3f%2529%253B%250D%250A        return String.fromCharCode%2528cc%2529%253B %257D%250D%250A    %2529%253B%250D%250A  return str%253B%250D%250A%257D%250D%250A%250D%250Afunction byteArrayToHexStr%2528b%2529 %257B%250D%250A  var s %253D %2527%2527%253B%250D%250A  for %2528var i%253D0%253B i%253Cb.length%253B i%252B%252B%2529 s %252B%253D b%255Bi%255D.toString%252816%2529 %252B %2527 %2527%253B%250D%250A  return s%253B%250D%250A%257D%250D%250A%250D%250AString.prototype.toCodes %253D function%2528%2529 %257B%250D%250A  if %2528this.length %253D%253D 0%2529 return %2527%2527%253B%250D%250A  var arr %253D this.split%2528%2527%2527%2529%253B%250D%250A  for %2528a in arr%2529 arr%255Ba%255D %253D arr%255Ba%255D.charCodeAt%25280%2529%253B%250D%250A  return arr.join%2528%2527%253A%2527%2529%253B%250D%250A%257D%250D%250Afunction Cipher%2528input%252C w%2529 %257B%250D%250A  var Nb %253D 4%253B%250D%250A  var Nr %253D w.length%252FNb - 1%253B%250D%250A%250D%250A  var state %253D %255B%255B%255D%252C%255B%255D%252C%255B%255D%252C%255B%255D%255D%253B%250D%250A  for %2528var i%253D0%253B i%253C4%252ANb%253B i%252B%252B%2529 state%255Bi%25254%255D%255BMath.floor%2528i%252F4%2529%255D %253D input%255Bi%255D%253B%250D%250A%250D%250A  state %253D AddRoundKey%2528state%252C w%252C 0%252C Nb%2529%253B%250D%250A%250D%250A  for %2528var round%253D1%253B round%253CNr%253B round%252B%252B%2529 %257B%250D%250A    state %253D SubBytes%2528state%252C Nb%2529%253B%250D%250A    state %253D ShiftRows%2528state%252C Nb%2529%253B%250D%250A    state %253D MixColumns%2528state%252C Nb%2529%253B%250D%250A    state %253D AddRoundKey%2528state%252C w%252C round%252C Nb%2529%253B%250D%250A  %257D%250D%250A%250D%250A  state %253D SubBytes%2528state%252C Nb%2529%253B%250D%250A  state %253D ShiftRows%2528state%252C Nb%2529%253B%250D%250A  state %253D AddRoundKey%2528state%252C w%252C Nr%252C Nb%2529%253B%250D%250A%250D%250A  var output %253D new Array%25284%252ANb%2529%253B%250D%250A  for %2528var i%253D0%253B i%253C4%252ANb%253B i%252B%252B%2529 output%255Bi%255D %253D state%255Bi%25254%255D%255BMath.floor%2528i%252F4%2529%255D%253B%250D%250A  return output%253B%250D%250A%257D%250D%250A%250D%250A%250D%250Afunction SubBytes%2528s%252C Nb%2529 %257B%250D%250A  for %2528var r%253D0%253B r%253C4%253B r%252B%252B%2529 %257B%250D%250A    for %2528var c%253D0%253B c%253CNb%253B c%252B%252B%2529 s%255Br%255D%255Bc%255D %253D Sbox%255Bs%255Br%255D%255Bc%255D%255D%253B%250D%250A  %257D%250D%250A  return s%253B%250D%250A%257D%250D%250A%250D%250A%250D%250Afunction ShiftRows%2528s%252C Nb%2529 %257B%250D%250A  var t %253D new Array%25284%2529%253B%250D%250A  for %2528var r%253D1%253B r%253C4%253B r%252B%252B%2529 %257B%250D%250A    for %2528var c%253D0%253B c%253C4%253B c%252B%252B%2529 t%255Bc%255D %253D s%255Br%255D%255B%2528c%252Br%2529%2525Nb%255D%253B%250D%250A    for %2528var c%253D0%253B c%253C4%253B c%252B%252B%2529 s%255Br%255D%255Bc%255D %253D t%255Bc%255D%253B%250D%250A  %257D%250D%250A  return s%253B%250D%250A%257D%250D%250A%250D%250Afunction MixColumns%2528s%252C Nb%2529 %257B%250D%250A  for %2528var c%253D0%253B c%253C4%253B c%252B%252B%2529 %257B%250D%250A    var a %253D new Array%25284%2529%253B%250D%250A    var b %253D new Array%25284%2529%253B%250D%250A    for %2528var i%253D0%253B i%253C4%253B i%252B%252B%2529 %257B%250D%250A      a%255Bi%255D %253D s%255Bi%255D%255Bc%255D%253B%250D%250A      b%255Bi%255D %253D s%255Bi%255D%255Bc%255D%25260x80 %253F s%255Bi%255D%255Bc%255D%253C%253C1 %255E 0x011b %253A s%255Bi%255D%255Bc%255D%253C%253C1%253B%250D%250A    %257D%250D%250A    s%255B0%255D%255Bc%255D %253D b%255B0%255D %255E a%255B1%255D %255E b%255B1%255D %255E a%255B2%255D %255E a%255B3%255D%253B%250D%250A    s%255B1%255D%255Bc%255D %253D a%255B0%255D %255E b%255B1%255D %255E a%255B2%255D %255E b%255B2%255D %255E a%255B3%255D%253B%250D%250A    s%255B2%255D%255Bc%255D %253D a%255B0%255D %255E a%255B1%255D %255E b%255B2%255D %255E a%255B3%255D %255E b%255B3%255D%253B%250D%250A    s%255B3%255D%255Bc%255D %253D a%255B0%255D %255E b%255B0%255D %255E a%255B1%255D %255E a%255B2%255D %255E b%255B3%255D%253B%250D%250A  %257D%250D%250A  return s%253B%250D%250A%257D%250D%250A%250D%250A%250D%250Afunction AddRoundKey%2528state%252C w%252C rnd%252C Nb%2529 %257B%250D%250A  for %2528var r%253D0%253B r%253C4%253B r%252B%252B%2529 %257B%250D%250A    for %2528var c%253D0%253B c%253CNb%253B c%252B%252B%2529 state%255Br%255D%255Bc%255D %255E%253D w%255Brnd%252A4%252Bc%255D%255Br%255D%253B%250D%250A  %257D%250D%250A  return state%253B%250D%250A%257D%250D%250A%250D%250A%250D%250Afunction KeyExpansion%2528key%2529 %257B%250D%250A  var Nb %253D 4%253B%250D%250A  var Nk %253D key.length%252F4%250D%250A  var Nr %253D Nk %252B 6%253B%250D%250A%250D%250A  var w %253D new Array%2528Nb%252A%2528Nr%252B1%2529%2529%253B%250D%250A  var temp %253D new Array%25284%2529%253B%250D%250A%250D%250A  for %2528var i%253D0%253B i%253CNk%253B i%252B%252B%2529 %257B%250D%250A    var r %253D %255Bkey%255B4%252Ai%255D%252C key%255B4%252Ai%252B1%255D%252C key%255B4%252Ai%252B2%255D%252C key%255B4%252Ai%252B3%255D%255D%253B%250D%250A    w%255Bi%255D %253D r%253B%250D%250A  %257D%250D%250A%250D%250A  for %2528var i%253DNk%253B i%253C%2528Nb%252A%2528Nr%252B1%2529%2529%253B i%252B%252B%2529 %257B%250D%250A    w%255Bi%255D %253D new Array%25284%2529%253B%250D%250A    for %2528var t%253D0%253B t%253C4%253B t%252B%252B%2529 temp%255Bt%255D %253D w%255Bi-1%255D%255Bt%255D%253B%250D%250A    if %2528i %2525 Nk %253D%253D 0%2529 %257B%250D%250A      temp %253D SubWord%2528RotWord%2528temp%2529%2529%253B%250D%250A      for %2528var t%253D0%253B t%253C4%253B t%252B%252B%2529 temp%255Bt%255D %255E%253D Rcon%255Bi%252FNk%255D%255Bt%255D%253B%250D%250A    %257D else if %2528Nk %253E 6 %2526%2526 i%2525Nk %253D%253D 4%2529 %257B%250D%250A      temp %253D SubWord%2528temp%2529%253B%250D%250A    %257D%250D%250A    for %2528var t%253D0%253B t%253C4%253B t%252B%252B%2529 w%255Bi%255D%255Bt%255D %253D w%255Bi-Nk%255D%255Bt%255D %255E temp%255Bt%255D%253B%250D%250A  %257D%250D%250A%250D%250A  return w%253B%250D%250A%257D%250D%250A%250D%250Afunction SubWord%2528w%2529 %257B%250D%250A  for %2528var i%253D0%253B i%253C4%253B i%252B%252B%2529 w%255Bi%255D %253D Sbox%255Bw%255Bi%255D%255D%253B%250D%250A  return w%253B%250D%250A%257D%250D%250A%250D%250Afunction RotWord%2528w%2529 %257B%250D%250A  var tmp %253D w%255B0%255D%253B%250D%250A  for %2528var i%253D0%253B i%253C3%253B i%252B%252B%2529 w%255Bi%255D %253D w%255Bi%252B1%255D%253B%250D%250A  w%255B3%255D %253D tmp%253B%250D%250A  return w%253B%250D%250A%257D%250D%250A%250D%250Avar Sbox %253D  %255B0x63%252C 0x7c%252C 0x77%252C 0x7b%252C 0xf2%252C 0x6b%252C 0x6f%252C 0xc5%252C 0x30%252C 0x01%252C 0x67%252C 0x2b%252C 0xfe%252C 0xd7%252C 0xab%252C 0x76%252C%250D%250A             0xca%252C 0x82%252C 0xc9%252C 0x7d%252C 0xfa%252C 0x59%252C 0x47%252C 0xf0%252C 0xad%252C 0xd4%252C 0xa2%252C 0xaf%252C 0x9c%252C 0xa4%252C 0x72%252C 0xc0%252C%250D%250A             0xb7%252C 0xfd%252C 0x93%252C 0x26%252C 0x36%252C 0x3f%252C 0xf7%252C 0xcc%252C 0x34%252C 0xa5%252C 0xe5%252C 0xf1%252C 0x71%252C 0xd8%252C 0x31%252C 0x15%252C%250D%250A             0x04%252C 0xc7%252C 0x23%252C 0xc3%252C 0x18%252C 0x96%252C 0x05%252C 0x9a%252C 0x07%252C 0x12%252C 0x80%252C 0xe2%252C 0xeb%252C 0x27%252C 0xb2%252C 0x75%252C%250D%250A             0x09%252C 0x83%252C 0x2c%252C 0x1a%252C 0x1b%252C 0x6e%252C 0x5a%252C 0xa0%252C 0x52%252C 0x3b%252C 0xd6%252C 0xb3%252C 0x29%252C 0xe3%252C 0x2f%252C 0x84%252C%250D%250A             0x53%252C 0xd1%252C 0x00%252C 0xed%252C 0x20%252C 0xfc%252C 0xb1%252C 0x5b%252C 0x6a%252C 0xcb%252C 0xbe%252C 0x39%252C 0x4a%252C 0x4c%252C 0x58%252C 0xcf%252C%250D%250A             0xd0%252C 0xef%252C 0xaa%252C 0xfb%252C 0x43%252C 0x4d%252C 0x33%252C 0x85%252C 0x45%252C 0xf9%252C 0x02%252C 0x7f%252C 0x50%252C 0x3c%252C 0x9f%252C 0xa8%252C%250D%250A             0x51%252C 0xa3%252C 0x40%252C 0x8f%252C 0x92%252C 0x9d%252C 0x38%252C 0xf5%252C 0xbc%252C 0xb6%252C 0xda%252C 0x21%252C 0x10%252C 0xff%252C 0xf3%252C 0xd2%252C%250D%250A             0xcd%252C 0x0c%252C 0x13%252C 0xec%252C 0x5f%252C 0x97%252C 0x44%252C 0x17%252C 0xc4%252C 0xa7%252C 0x7e%252C 0x3d%252C 0x64%252C 0x5d%252C 0x19%252C 0x73%252C%250D%250A             0x60%252C 0x81%252C 0x4f%252C 0xdc%252C 0x22%252C 0x2a%252C 0x90%252C 0x88%252C 0x46%252C 0xee%252C 0xb8%252C 0x14%252C 0xde%252C 0x5e%252C 0x0b%252C 0xdb%252C%250D%250A             0xe0%252C 0x32%252C 0x3a%252C 0x0a%252C 0x49%252C 0x06%252C 0x24%252C 0x5c%252C 0xc2%252C 0xd3%252C 0xac%252C 0x62%252C 0x91%252C 0x95%252C 0xe4%252C 0x79%252C%250D%250A             0xe7%252C 0xc8%252C 0x37%252C 0x6d%252C 0x8d%252C 0xd5%252C 0x4e%252C 0xa9%252C 0x6c%252C 0x56%252C 0xf4%252C 0xea%252C 0x65%252C 0x7a%252C 0xae%252C 0x08%252C%250D%250A             0xba%252C 0x78%252C 0x25%252C 0x2e%252C 0x1c%252C 0xa6%252C 0xb4%252C 0xc6%252C 0xe8%252C 0xdd%252C 0x74%252C 0x1f%252C 0x4b%252C 0xbd%252C 0x8b%252C 0x8a%252C%250D%250A             0x70%252C 0x3e%252C 0xb5%252C 0x66%252C 0x48%252C 0x03%252C 0xf6%252C 0x0e%252C 0x61%252C 0x35%252C 0x57%252C 0xb9%252C 0x86%252C 0xc1%252C 0x1d%252C 0x9e%252C%250D%250A             0xe1%252C 0xf8%252C 0x98%252C 0x11%252C 0x69%252C 0xd9%252C 0x8e%252C 0x94%252C 0x9b%252C 0x1e%252C 0x87%252C 0xe9%252C 0xce%252C 0x55%252C 0x28%252C 0xdf%252C%250D%250A             0x8c%252C 0xa1%252C 0x89%252C 0x0d%252C 0xbf%252C 0xe6%252C 0x42%252C 0x68%252C 0x41%252C 0x99%252C 0x2d%252C 0x0f%252C 0xb0%252C 0x54%252C 0xbb%252C 0x16%255D%253B%250D%250A%250D%250Avar Rcon %253D %255B %255B0x00%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x01%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x02%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x04%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x08%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x10%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x20%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x40%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x80%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x1b%252C 0x00%252C 0x00%252C 0x00%255D%252C%250D%250A             %255B0x36%252C 0x00%252C 0x00%252C 0x00%255D %255D%253B%250D%250A%250D%250Afunction AESDecryptCtr%2528ciphertext%252C password%252C nBits%2529 %257B%250D%250A  var blockSize %253D 16%253B%250D%250A  if %2528%2521%2528nBits%253D%253D128 %257C%257C nBits%253D%253D192 %257C%257C nBits%253D%253D256%2529%2529 return %2527%2527%253B%250D%250A  ciphertext %253D ciphertext.decodeBase64%2528%2529%253B%250D%250A  password %253D password.encodeUTF8%2528%2529%253B%250D%250A%250D%250A  var nBytes %253D nBits%252F8%253B%250D%250A  var pwBytes %253D new Array%2528nBytes%2529%253B%250D%250A  for %2528var i%253D0%253B i%253CnBytes%253B i%252B%252B%2529 pwBytes%255Bi%255D %253D password.charCodeAt%2528i%2529%253B%250D%250A  var key %253D Cipher%2528pwBytes%252C KeyExpansion%2528pwBytes%2529%2529%253B%250D%250A  key %253D key.concat%2528key.slice%25280%252C nBytes-16%2529%2529%253B%250D%250A%250D%250A  var counterBlock %253D new Array%25288%2529%253B%250D%250A  ctrTxt %253D ciphertext.slice%25280%252C 8%2529%253B%250D%250A  for %2528var i%253D0%253B i%253C8%253B i%252B%252B%2529 counterBlock%255Bi%255D %253D ctrTxt.charCodeAt%2528i%2529%253B%250D%250A%250D%250A  var keySchedule %253D KeyExpansion%2528key%2529%253B%250D%250A%250D%250A  var nBlocks %253D Math.ceil%2528%2528ciphertext.length-8%2529 %252F blockSize%2529%253B%250D%250A  var ct %253D new Array%2528nBlocks%2529%253B%250D%250A  for %2528var b%253D0%253B b%253CnBlocks%253B b%252B%252B%2529 ct%255Bb%255D %253D ciphertext.slice%25288%252Bb%252AblockSize%252C 8%252Bb%252AblockSize%252BblockSize%2529%253B%250D%250A  ciphertext %253D ct%253B%250D%250A%250D%250A  var plaintxt %253D new Array%2528ciphertext.length%2529%253B%250D%250A%250D%250A  for %2528var b%253D0%253B b%253CnBlocks%253B b%252B%252B%2529 %257B%250D%250A    for %2528var c%253D0%253B c%253C4%253B c%252B%252B%2529 counterBlock%255B15-c%255D %253D %2528%2528b%2529 %253E%253E%253E c%252A8%2529 %2526 0xff%253B%250D%250A    for %2528var c%253D0%253B c%253C4%253B c%252B%252B%2529 counterBlock%255B15-c-4%255D %253D %2528%2528%2528b%252B1%2529%252F0x100000000-1%2529 %253E%253E%253E c%252A8%2529 %2526 0xff%253B%250D%250A%250D%250A    var cipherCntr %253D Cipher%2528counterBlock%252C keySchedule%2529%253B%250D%250A%250D%250A    var plaintxtByte %253D new Array%2528ciphertext%255Bb%255D.length%2529%253B%250D%250A    for %2528var i%253D0%253B i%253Cciphertext%255Bb%255D.length%253B i%252B%252B%2529 %257B%250D%250A      plaintxtByte%255Bi%255D %253D cipherCntr%255Bi%255D %255E ciphertext%255Bb%255D.charCodeAt%2528i%2529%253B%250D%250A      plaintxtByte%255Bi%255D %253D String.fromCharCode%2528plaintxtByte%255Bi%255D%2529%253B%250D%250A    %257D%250D%250A    plaintxt%255Bb%255D %253D plaintxtByte.join%2528%2527%2527%2529%253B%250D%250A  %257D%250D%250A%250D%250A  var plaintext %253D plaintxt.join%2528%2527%2527%2529%253B%250D%250A  plaintext %253D plaintext.decodeUTF8%2528%2529%253B%250D%250A%250D%250A  return plaintext%253B%250D%250A%257D%250D%250Aciphertxt%253D%2527%22 %2Bcipherlink %2B%22%2527%253B%250D%250Apasswd%253Dprompt%2528%2527Podaj haslo%253A%2527%252C %2527abcd1234%2521%253F%2527%2529%253B%250D%250Aplaintxt%253DAESDecryptCtr%2528 ciphertxt%252C passwd%252C 256%2529%253B%250D%250Aif%2528%2528macz %253Dplaintxt.match%2528%252F%255E%253C--%2528.%252A%2529--%253E%2524%252F%2529%2529 %2529%250D%250A  document.location %253D macz%255B1%255D%253B%250D%250Aelse%250D%250A  alert%2528%2527Nieprawidlowe haslo%2521%2527%2529%253B%22%3B%0D%0Awnd%3Dwindow.open%28%29%3B%0D%0Awith%28wnd%29%0D%0A%7B%0D%0A  document.write%28%27%3Chtml%3E%3Cbody bgcolor%3D%22%23C0C0C0%22 LINK%3D%22%230600FF%22 VLINK%3D%22%230600FF%22 ALINK%3D%22%230600FF%22 leftmargin%3D%2250%22 rightmargin%3D%22100%22 topmargin%3D%22100%22%3E%3Ccenter%3E%3Cb%3E%3Cbr %2F%3EDodaj ponizszy %28zabezpieczony haslem%29 link do swoich zakladek%3A%3Cbr %2F%3E%3Cbr %2F%3E%3Ca href%3D%22%27%2Bbookmarklet%2B%27%22%3E%27%2B%28%28linktitle%3D%3D%22%22%29%3Fplainlink%3A linktitle%29%2B%27%3C%2Fa%3E%3Cbr %2F%3E%3Cbr %2F%3E%3Cbr %2F%3E%3Cbr %2F%3E%3Cbr %2F%3E%3C%2Fb%3EGenerator zak%26%23322%3Badek zabezpieczonych has%26%23322%3Bem korzysta z %3Ca href%3D%22http%3A%2F%2Fwww.movable-type.co.uk%2Fscripts%2Faes.html%22%3Eimplementacji algorytmu AES w jezyku Javascript%2C ktorej autorem jest Chris Veness%3C%2Fa%3E%3C%2Fcenter%3E%3C%2Fbody%3E%3C%2Fhtml%3E%27%29%3B%0D%0A  document.close%28%29%3B%0D%0A%7D


Jednym słowem poczyniłem kolejny krok - skryptozakładki już się same rozmnażają :P

Pozdrawiam,
Mirek
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Postautor: Grzegorz » 10 lutego 2009, 19:59

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6

Używam takiej oto skryptozakładki
Kod: Zaznacz cały
javascript:void(location.href='http://www.htm2pdf.co.uk/?url='+escape(location.href))


Jest może jakiś sposób, aby po jej użyciu (1) zamiast do strony z odnośnikiem Firefox od razu prowadził do pliku PDF oraz (2) zamiast losowej nazwą był tytuł strony eksportowanej do PDF?
GnuPG. Podpisuję własne wypowiedzi. | TrueCrypt. Ufam kryptografii, nie państwu. | Tor. Dbam o swoją prywatność. | OTR. Moje rozmowy nie są podsłuchiwane.

Załóż konto lub kup domenę WWW z linka polecającego: http://www.hekko.pl/?ref=34295
Grzegorz
Moderator
 
Posty: 7494
Z nami od: 15 kwietnia 2007, 12:33

Re:

Postautor: Mirek » 01 października 2009, 16:51

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)

GrzegorzJZD pisze:Jest może jakiś sposób, aby po jej użyciu (1) zamiast do strony z odnośnikiem Firefox od razu prowadził do pliku PDF oraz (2) zamiast losowej nazwą był tytuł strony eksportowanej do PDF?

(1) - nie wiem, czy to przez pomysł opisany przed chwilą w innym poście, nie dostrzegam innych rozwiązań, czy ich po prostu nie ma - ale to co pierwsze na myśl mi się nasuwa - to stworzyć okno-dziecko i z niego przekierować rodzica bezpośrednio do PDFa.
(2) - kiedyś chciałem coś takiego zrobić - chyba z plikami z wrzuty - w których brakowało rozszerzenia mp3 - tylko się przeglądarka mi wykrzaczyła na dużym pliku i straciłem moją rozgrzebaną skryptozakładkę :( A pomysł był taki, że przez AJAXa pobierałem plik i jego zawartość wrzucałem jako data URI zakodowane przy pomocy base64 - rozszerzenie mp3 było przy zapisywaniu, ale za to teraz nazwę pliku stanowiły jakieś losowe krzaczki. I się potem już nie bawiłem. Jedyne co mi przychodzi do głowy, to zrobić sobie odpowiedni skrypt np. w php, który przerobi nazwę pliku i wyśle do przeglądarki :-) Właściwie tym sposobem można by rozwiązać także (1).

Pozdrawiam,
Mirek
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Re: Przydatne skryptozakładki

Postautor: Grzegorz » 01 października 2009, 20:15

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3

Mirku, skoro pojawiłeś się po odświeżeniu szaty forum, może dodasz nowe wersje skryptozakładek do autologowania i otwierania nowych postów? Były bardzo pomoce, a obecnie nie działają.
GnuPG. Podpisuję własne wypowiedzi. | TrueCrypt. Ufam kryptografii, nie państwu. | Tor. Dbam o swoją prywatność. | OTR. Moje rozmowy nie są podsłuchiwane.

Załóż konto lub kup domenę WWW z linka polecającego: http://www.hekko.pl/?ref=34295
Grzegorz
Moderator
 
Posty: 7494
Z nami od: 15 kwietnia 2007, 12:33

Odp: Re: Przydatne skryptozakładki

Postautor: Mirek » 01 października 2009, 21:48

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)

GrzegorzJZD pisze:Mirku, skoro pojawiłeś się po odświeżeniu szaty forum, może dodasz nowe wersje skryptozakładek do autologowania i otwierania nowych postów? Były bardzo pomoce, a obecnie nie działają.

Oki, się zrobi :-) Tylko jak byś mógł mi przypomnieć jak dokładnie działało autologowanie (czy to było to coś z dopisywaniem sida, czy po prostu wypełnienie formularza logowania, czy może jeszcze coś innego).

Update: A otwieranie nowych tematów w nowych kartach / oknach po małej przeróbce wygląda tak:
Kod: Zaznacz cały
javascript:imgs=document.getElementsByTagName('img');for(i=0; i<imgs.length; ++i){  if(imgs[i].src.indexOf('icon_topic_newest.gif')!=-1)  {    if(imgs[i].parentNode.parentNode.lastChild.previousSibling.innerHTML == "/dev/null") continue; window.open(imgs[i].parentNode.href);   }  }void 0;
Mirek
Moderator
 
Posty: 2097
Z nami od: 09 sierpnia 2007, 20:37

Następna

Wróć do Programowanie z użyciem technologii Mozilli

Kto jest online

Zarejestrowani użytkownicy: Bing [Bot], dexter, Google [Bot], Yahoo [Bot]

Przejdź do powiązanej strony

Nawigacja:

Stopka: