Perché i browser non generano un errore quando qualsiasi altra parola viene utilizzata al posto di "javascript" nel valore di onclick?


100

Ho ereditato un sito Web e ho appena scoperto questa curiosità:

<a href="/delete"  onClick="jamoscript:return confirm('Do you really want to do that?');">Delete all</a>

Posso visualizzare la pagina che lo contiene e fare clic sul collegamento per visualizzare la finestra di dialogo di conferma esattamente come faccio quando cambio " jamoscript" in " javascript". Nessuna diagnostica viene visualizzata nella console Firebug, né quando la pagina viene caricata né quando si fa clic sul collegamento. Che diavolo? Cercare su Google Jamoscript non risulta nulla di interessante.

Qualcuno può spiegare questo comportamento?

Risposte:


144

Il valore stringa di un attributo "onclick" è considerato un semplice codice JavaScript. JavaScript include disposizioni per le istruzioni etichettate , in modo che il codice sia returnun'istruzione con l'etichetta "jamoscript". In altre parole, questo:

jamoscript: return confirm("Do you really want to hurt me?");

è JavaScript perfettamente legale. Le etichette non vengono utilizzate molto, quindi non sono familiari.

L'unico contesto in cui il prefisso "javascript:" è importante è quando è previsto un URL, come nel caso dell'attributo "href" dei <a>tag.


53
Questa domanda mi sta facendo davvero desiderare che il linguaggio fosse stato chiamato "JamoScript".
Pointy

5
Questo mi ricorda il famoso problema di ciò che la segue fa: function foo(a) { x: 2 }.

80
Ho creato un account qui, solo per dirti che questa riga di codice (? -Non sono un programmatore) è stata senza dubbio scritta da un greco, o almeno "jamoscirpt" è stato proposto da un greco. "Jamo" è il modo in cui si tenterebbe di usare i suoni delle lettere inglesi per produrre il suono che la parola "f --- ing" ha nella lingua greca. Quindi se provi a leggere ad alta voce "jamoscript", una persona greca che conosce la parola "script" capirà "f --- ing script". L'effetto voluto sarebbe più certo se invece di "j" fosse stata usata la lettera "g", ma immagino che ci fosse il gioco previsto con "j-ava".
Alecos Papadopoulos

6
@AlecosPapadopoulos wow, è fantastico. Semmai, mi fa desiderare ancora di più che il linguaggio fosse effettivamente chiamato "JamoScript" :)
Pointy

6
@asawyer Apprezzo le informazioni (+1), ma per favore non tentarmi di gettare il mio mansueto personaggio in linea e tornare a quello vero ...
Alecos Papadopoulos
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.