Notizie: puoi sempre seguire i nostri aggiornamenti su Twitter (@MozillaItalia) e Facebook (/MozillaItalia)

Autore Topic: [Bookmarklet] aiuto per carattere # e funzione esterna.  (Letto 1249 volte)

0 Utenti e 2 Visitatori stanno visualizzando questo topic.

Offline Borgata

  • Post: 624
Sto creando alcuni bookmarklet con delle funzioni che mi servono.
Al momento ho due problemi:

1) il carettere # nell'url.
In questo caso vorrei ricaricare una pagina aggiungendo in coda un'ancora. Si tratta però di una pagina dinamica, il cui contenuto è gestito dalla piattaforma del sito.
Per capirci, vorrei passare da www.sito.it a www.sito.it#ancora

Il problema è che non riesco a gestire il carattere cancelletto.
Non posso metterlo non codificato: mi carica una pagina bianca con scritto l'indirizzo che avrei voluto aprire.
Non posso metterlo codificato, ne manualmente ne utilizzando encodeURIComponent: semplicemente non lo vede come se fosse un # e cerca di caricare una pagina che non esiste.
Ecco qui alcuni dei codici che ho tentato:
Codice: [Seleziona]
javascript:location=location+'#'+'ui-tabs-6';
javascript:location=encodeURIComponent(location+'#ui-tabs-6');

Esiste un modo per passargli quel carattere cancelletto?


2) riutilizzo del codice
Un secondo bookmarklet si basa su uno script più lungo, un po' troppo lungo per esser replicato su centinaia di bookmarklet da inserire tra i miei segnalibri (o meglio... con cui sostituire quelli attuali).

Il problema quindi consiste nel poter scrivere una funzione esterna ai bookmarklets ma utilizzabile da tutti questi (si tratta solo di modificare un parametro, per il resto questi bookmarklets sono uguali).

É possibile farlo?

Offline Borgata

  • Post: 624
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #1 il: 11 Giugno 2012 13:13:13 »
Nessuna idea o ho sbagliato sezione?
O forse sarebbe meglio chiedere, chessò, su mozillazine?

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #2 il: 11 Giugno 2012 14:01:45 »
Prova così:

Codice: [Seleziona]
javascript:(function(){s=document.createElement('script');s.type='text/javascript';s.src='URL_FILE_JS';document.body.appendChild(s);})();

dove metti l'url al tuo file JS con la funzione.

Offline Borgata

  • Post: 624
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #3 il: 11 Giugno 2012 15:20:55 »
Grazie. Quindi stiamo parlando del punto 2).
In realtà speravo che la funzione potesse stare dentro i bookmark, piuttosto che in un file esterno, per averla sempre disponibile.
Se non avessi il file in locale altrimenti perderei tutti i segnalibri che utilizzano questo script. Oltretutto il file js dovrebbe essere accessibile online, il che immagino implichi uno spazio dove hostarlo.
Oltretutto speravo in qualcosa di più compatto, ma immagino non si possa avere tutto!  :P

É già un buon punto di inizio comunque, prima di procedere vediamo se è possibile risolvere in altro modo.
« Ultima modifica: 11 Giugno 2012 15:22:56 da Borgata »

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #4 il: 11 Giugno 2012 15:37:09 »
Mettilo su Github, non stai tanto a farti un'account, o su Dropbox (se fai un account su Dropbox ti mando il mio referal così mi fai guadagnare 1GB :-D).

Mettere le funzioni su un altro segnalibro non si può, credo per motivi di sicurezza e altro.


Offline Borgata

  • Post: 624
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #5 il: 11 Giugno 2012 19:59:54 »
Peccato, è già una discreta soluzione comunque.
Spero che lo script non abbia problemi ad agire su una pagina che sta altrove.

Piuttosto mi preoccupa un po' il fatto che passerei da un url del tipo "http://www.sito.ext/subfolderl/?param=123456" ad uno script decisamente più lungo, che moltiplicato per centinaia di segnalibri temo appesantirà molto il database.
Avevo sperato in qualcosa del tipo:
javascript:myfunction(123456);
 :P

Per il primo problema non c'è nulla da fare?

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #6 il: 11 Giugno 2012 23:29:42 »
Uhm, non preoccuparti, Firefox non mette limiti ai caratteri da usare nei bookmarklet (IE, almeno fino alla 7 si).

Io ne ho di davvero lunghi e non ho mai avuto problemi. Comunque puoi mettere tutto il codice del bookmarklet su un file JS,  prova se accorciando l'url con bit.ly funziona lo stesso se ti preoccupi del risparmio caratteri :-P

Edit:
Questo lo devo finire ma non ho mai voglia, comunque è lungo (ne ho tre copie: release, beta e backup)

Codice: [Seleziona]
javascript:(function(){json={'aring' : 229, 'gt' : 62, 'sup' : 8835, 'Ntilde' : 209, 'upsih' : 978, 'Yacute' : 221, 'Atilde' : 195, 'sqrt' : 8730, 'otimes' : 8855, 'aelig' : 230, 'Psi' : 936, 'Uuml' : 220, 'Epsilon' : 917, 'Icirc' : 206, 'Eacute' : 201, 'Lambda' : 923, 'Prime' : 8243, 'Kappa' : 922, 'sigmaf' : 962, 'lrm' : 8206, 'cedil' : 184, 'ensp' : 8194, 'AElig' : 198, 'prime' : 8242, 'Tau' : 932, 'lceil' : 8968, 'dArr' : 8659, 'ge' : 8805, 'sdot' : 8901, 'lfloor' : 8970, 'lArr' : 8656, 'Auml' : 196, 'brvbar' : 166, 'Otilde' : 213, 'Theta' : 920, 'Pi' : 928, 'OElig' : 338, 'Scaron' : 352, 'egrave' : 232, 'sub' : 8834, 'iexcl' : 161, 'ordf' : 170, 'sum' : 8721, 'ntilde' : 241, 'atilde' : 227, 'theta' : 952, 'nsub' : 8836, 'hArr' : 8660, 'Oslash' : 216, 'THORN' : 222, 'yuml' : 255, 'Mu' : 924, 'thinsp' : 8201, 'ecirc' : 234, 'bdquo' : 8222, 'Aring' : 197, 'nabla' : 8711, 'permil' : 8240, 'Ugrave' : 217, 'eta' : 951, 'Agrave' : 192, 'forall' : 8704, 'eth' : 240, 'rceil' : 8969, 'iuml' : 239, 'Egrave' : 200, 'divide' : 247, 'igrave' : 236, 'otilde' : 245, 'pound' : 163, 'frasl' : 8260, 'ETH' : 208, 'lowast' : 8727, 'chi' : 967, 'Aacute' : 193, 'cent' : 162, 'Beta' : 914, 'perp' : 8869, 'there4' : 8756, 'pi' : 960, 'empty' : 8709, 'euml' : 235, 'notin' : 8713, 'uuml' : 252, 'icirc' : 238, 'bull' : 8226, 'upsilon' : 965, 'Oacute' : 211, 'kappa' : 954, 'ccedil' : 231, 'cap' : 8745, 'mu' : 956, 'deg' : 176, 'tau' : 964, 'emsp' : 8195, 'hellip' : 8230, 'ucirc' : 251, 'ugrave' : 249, 'cong' : 8773, 'Iota' : 921, 'quot' : 34, 'rarr' : 8594, 'Rho' : 929, 'uacute' : 250, 'acirc' : 226, 'sim' : 8764, 'phi' : 966, 'diams' : 9830, 'Euml' : 203, 'Ccedil' : 199, 'Eta' : 919, 'Gamma' : 915, 'euro' : 8364, 'thetasym' : 977, 'sect' : 167, 'ldquo' : 8220, 'hearts' : 9829, 'oacute' : 243, 'zwnj' : 8204, 'yen' : 165, 'ograve' : 242, 'Chi' : 935, 'trade' : 8482, 'xi' : 958, 'nbsp' : 160, 'tilde' : 732, 'lsaquo' : 8249, 'oelig' : 339, 'equiv' : 8801, 'le' : 8804, 'auml' : 228, 'cup' : 8746, 'Yuml' : 376, 'lt' : 60, 'Upsilon' : 933, 'ndash' : 8211, 'yacute' : 253, 'real' : 8476, 'psi' : 968, 'rsaquo' : 8250, 'darr' : 8595, 'Alpha' : 913, 'not' : 172, 'amp' : 38, 'oslash' : 248, 'acute' : 180, 'zwj' : 8205, 'laquo' : 171, 'rdquo' : 8221, 'Igrave' : 204, 'micro' : 181, 'shy' : 173, 'supe' : 8839, 'szlig' : 223, 'clubs' : 9827, 'agrave' : 224, 'Ocirc' : 212, 'harr' : 8596, 'larr' : 8592, 'frac12' : 189, 'prop' : 8733, 'circ' : 710, 'ocirc' : 244, 'asymp' : 8776, 'uml' : 168, 'prod' : 8719, 'reg' : 174, 'rlm' : 8207, 'infin' : 8734, 'Sigma' : 931, 'mdash' : 8212, 'uarr' : 8593, 'times' : 215, 'rArr' : 8658, 'or' : 8744, 'gamma' : 947, 'lambda' : 955, 'rang' : 10217, 'sup3' : 179, 'dagger' : 8224, 'Ouml' : 214, 'image' : 8465, 'alefsym' : 8501, 'sube' : 8838, 'alpha' : 945, 'Nu' : 925, 'plusmn' : 177, 'sup1' : 185, 'sup2' : 178, 'frac34' : 190, 'oline' : 8254, 'Delta' : 916, 'loz' : 9674, 'iota' : 953, 'iacute' : 237, 'para' : 182, 'ordm' : 186, 'epsilon' : 949, 'weierp' : 8472, 'part' : 8706, 'delta' : 948, 'omicron' : 959, 'copy' : 169, 'Iuml' : 207, 'Xi' : 926, 'Dagger' : 8225, 'Ograve' : 210, 'Ucirc' : 219, 'scaron' : 353, 'lsquo' : 8216, 'in' : 8712, 'Zeta' : 918, 'minus' : 8722, 'and' : 8743, 'ang' : 8736, 'curren' : 164, 'int' : 8747, 'rfloor' : 8971, 'crarr' : 8629, 'exist' : 8707, 'oplus' : 8853, 'Acirc' : 194, 'piv' : 982, 'ni' : 8715, 'Phi' : 934, 'Iacute' : 205, 'Uacute' : 218, 'Omicron' : 927, 'ne' : 8800, 'iquest' : 191, 'sbquo' : 8218, 'Ecirc' : 202, 'zeta' : 950, 'Omega' : 937, 'nu' : 957, 'macr' : 175, 'frac14' : 188, 'aacute' : 225, 'uArr' : 8657, 'beta' : 946, 'fnof' : 402, 'rho' : 961, 'eacute' : 233, 'omega' : 969, 'middot' : 183, 'lang' : 10216, 'spades' : 9824, 'rsquo' : 8217, 'thorn' : 254, 'ouml' : 246, 'raquo' : 187, 'sigma' : 963, 'star' : 9733, 'emptystar' : 9734, 'complex' : 8450,  'natural' : 8469, 'rational' : 8474, "notes" : 9834, "note" : 9835, "noted" : 9836,'cvd':10004, 'rlo' : 8238,'lcross' : 10013, 'sharp' : 9839 ,'flat': 9837};function IsNumeric(input){return (input - 0) == input && input.length > 0;}function getCharPrompt(){n=prompt('Inserisci il codice del carattere: ','');;if (!(IsNumeric(n))) n=json[n];c=String.fromCharCode(n);;return c;}var p='%s';if( (p!='') || (p|='%')) {if (IsNumeric(p)) c=String.fromCharCode(p);else c=p.charCodeAt(0);alert(c);}else{t=document.querySelector('textarea');if (t) {s=t.value;if (t.selectionStart!=t.selectionEnd) {function repl(str,p){return (json[p]) ? String.fromCharCode(json[p]) : p;}s=s.replace(/\\(\w+)\\*/g, repl);}else{c=getCharPrompt();s=s.substring(0,t.selectionStart)+c+s.substring(t.selectionStart,s.length);}t.value=s;}else{s=window.getSelection().toString();if (s!='') c=s.charCodeAt(0);else {c=getCharPrompt();}alert(c);}}})()
« Ultima modifica: 11 Giugno 2012 23:33:00 da gialloporpora »

Offline michro

  • Moderatore
  • Post: 22659
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #7 il: 11 Giugno 2012 23:44:34 »
@gialloporpora... cos'è? Un tappeto persiano? :lol:

Scusa, non ho resistito ma per me che non ho dimestichezza con codici e procedure di questo tipo...  :wink:

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #8 il: 12 Giugno 2012 00:01:08 »
Sto creando alcuni bookmarklet con delle funzioni che mi servono.
Al momento ho due problemi:

1) il carettere # nell'url.

Codice: [Seleziona]
javascript:location=location+'#'+'ui-tabs-6'; void(0);

Per la cronaca il carattere che usi non c'entra niente, per saperne di più leggi qui:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/void#JavaScript_URIs
« Ultima modifica: 12 Giugno 2012 00:03:58 da klades »

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #9 il: 12 Giugno 2012 00:31:31 »
@michro,

no, è da finire, è per fare i caratteri strani con le entity HTML, tipo io scrivo nel box qui sul forum:

Codice: [Seleziona]
\theta

lo seleziono e lui mi mostra θ, su una pagina dove non ci sono textarea ti mostra il prompt e poi ti visualizza il carattere, ma è da finire, ha due/tre bug.


Anche con la funzione vuota (non so tecnicamente come si chiama) dovresti risolvere quel problema è quella nel mio primo esempio:
Codice: [Seleziona]
(function(){  …  });();
« Ultima modifica: 12 Giugno 2012 00:34:18 da gialloporpora »

Offline Borgata

  • Post: 624
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #10 il: 12 Giugno 2012 00:56:40 »
Oddio... ora vi sto perdendo!  :shock:

@klades
Ecco, qui ti ho perso del tutto. L'aggiunta di void(0) mi permette di aggiungere la stringa che voglio, ma la pagina non viene ricaricata come avveniva prima. Quindi di fatto è come se incollasse semplicemente la stringa nella barra degli indirizzi, ma senza far nulla.
Quando dici "il carattere che usi non c'entra niente" non sono affatto sicuro di capire a cosa ti riferisci. Io voglio solo che la pagina si carichi all'ancora specificata, e il # è il carattere per specificare l'ancora.

@gialloporpora
Intendi al posto del void(0) di klades? Ancora non mi è chiaro cosa succede...

Uhm, non preoccuparti, Firefox non mette limiti ai caratteri da usare nei bookmarklet (IE, almeno fino alla 7 si).
Diciamo che non mi preoccupa la funzionalità, ma solo che dopo aver convertito tutti i bookmark, mi ritrovi un database grosso il doppio!  :mrgreen:
« Ultima modifica: 12 Giugno 2012 09:21:28 da Borgata »

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #11 il: 12 Giugno 2012 11:59:19 »
Io di solito uso:
location.replace(url);
per ricaricare un url, non so se basta cabiare il location come fai tu, non credo, ma posso pure sbagliarmi.

Offline Borgata

  • Post: 624
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #12 il: 12 Giugno 2012 14:06:49 »
Se non utilizzo il # funziona bene, la pagina viene ricaricata.
Utilizzando la funzione che mi hai suggerito, ottengo come risultato
Codice: [Seleziona]
http://www.sito.it/subdir/undefinedSia con che senza encodeURIComponent.

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #13 il: 12 Giugno 2012 14:16:14 »
Allora,
secondo me è perché tu converti location in una stringa, per me location è un oggetto, io faccio sempre così:
Codice: [Seleziona]
javascript:location.replace(location.href+'#'+'ui-tabs-6'); void(0);

come l'hai scritta tu, io non capisco come farla tornare, sicuramente si potrà fare, JS è bello perché non si fa le pippe come il C++ coi tipi di dati, però a volte fa troppe cose “magiche” e ci si perde.
Edit: scusa, avevo dimenticato un location=
« Ultima modifica: 12 Giugno 2012 14:24:23 da gialloporpora »

Offline Borgata

  • Post: 624
Re: [Bookmarklet] aiuto per carattere # e funzione esterna.
« Risposta #14 il: 12 Giugno 2012 14:22:18 »
Il mio approccio è piuttosto... come dire... arrangione.
Diciamo che quando avrò tempo di vedere bene le base e la documentazione potrò eventualmente far meglio, per ora cercavo di ottenere un risultato che mi pareva semplice in modo semplice. Approccio fallimentare, a quanto pare!  :P

Ora provo a modificare il codice basandomi su quello che hai scritto e verifico se risolve il problema.

0 Utenti e 2 Visitatori stanno visualizzando questo topic.