2013-09-02 13 views
83

sono incappato in qualcosa di strano che non ho mai visto prima:Qual è il punto di "javascript:" in codice (non URL)?

javascript:a=a+10; 

La linea di cui sopra sembra essere corretta e valuta felicemente (almeno in Firefox), proprio come se la parte javascript: non è mai esistito.

Mentre capisco lo scopo del vecchio stile javascript:void(...)<a href=".."/> utilizzato durante l'età buia di DHTML, non riesco a capire alcun utilizzo utile di questo prefisso nel codice JavaScript semplice.

Ha qualche significato speciale?

+8

Non posso parlare per tutti, ma non ho mai ** visto questo in puro codice JS. Puoi fare un esempio? (* Potrebbe funzionare molto bene, ma non dovrebbe avere alcuna influenza su ciò che è così, quindi mi piacerebbe sapere dove hai visto questo *) – h2ooooooo

+0

Dove l'hai visto? – reporter

+1

Dove lo stai scrivendo? è in tag di ancoraggio o dove? – pixelbyaj

risposta

97

"javascript:" è un label. Dovrebbe essere usato per identificare un ciclo in modo da poter usare "break javascript;" per uscire da esso, ma qui viene utilizzato in modo improprio. È innocuo, ma probabilmente non è una buona idea aggiungere un'etichetta a un'istruzione che non sia un loop.

+0

È strano come lo chiamino etichetta quando sono ufficiali (come in IANA), quelli che sono i prefissi dei collegamenti sono chiamati [Schema URI] (http://en.wikipedia.org/wiki/URI_scheme#Unofficial_but_common_URI_schemes). Beh, è ​​vero che non è registrato ufficialmente con IANA, ma questo tipo di convenzione di denominazione dovrebbe ancora essere utilizzato. –

+17

Tranne che, come indica la domanda, non è in un URI, ma in codice semplice. Come suggerisce Quentin di seguito, è quasi certamente causato da qualcuno che copia e incolla senza capire cosa stanno facendo. – Jules

+0

Sì, ma è ancora usato come [URL] (http://en.wikipedia.org/wiki/Uniform_resource_locator), anche se usato all'interno di href, onclick ecc. Sì, l'ho notato, ma mi sono abituato a questo tipo di domande Qui. –

52

È sintatticamente valido (è un label) ma inutile. È cargo culting causato dalle persone che copiano/incollano il codice senza capirlo.

+8

+1 per il link setta cargo :). Copia/incolla le persone sembra essere molto diffusa nel personale aziendale responsabile della progettazione interna webapp. – sitifensys

+10

Questo articolo del wiki sul culto del carico nella programmazione non sarebbe più sul posto? [1] http://en.wikipedia.org/wiki/Cargo_cult_programming – AnyOneElse

-2

Sono d'accordo sull'inutilità di esso come etichetta, ma in alcuni casi è ancora utile. Ad esempio, è necessario eseguire un breve snippet dalla barra degli indirizzi o scrivere un bookmarklet. Ma in questo caso, javascript: sarà più simile a uno schema di pseudo-protocollo.

+7

Questo è in realtà completamente diverso. 'javascript:' all'inizio di un URL, il browser esegue il resto dell'URL come JavaScript. 'javascript:' all'inizio di una riga * di codice JavaScript * è un'etichetta denominata "' javascript' ", proprio come' foobar: 'è un'etichetta chiamata" 'foobar'". Sono del tutto estranei e si verificano in diversi contesti, ma sembrano simili. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label – Peeja

12

JavaScript può essere utilizzato anche da pagine Web in un HTML Application (HTA). In un HTA, è possibile utilizzare un mix di VBScript e JavaScript. Quando si utilizzano gli script nella propria applicazione, come di seguito, il linguaggio di scripting viene automaticamente impostato su VBScript.

Quindi un elemento con un evento onclick JavaScript, come nel seguito, genera un errore.

<a id="myLink" href="#" onclick="MyFunction();return false;">Click me!</a> 

È possibile risolvere questo problema in modo esplicito impostare la lingua a JavaScript

<a id="myLink" href="#" onclick="javascript:alert('Javascript Executed!');return false;">Click me for Javascript!</a> 

O in VBScript per

<a id="myLink" href="#" onclick='vbscript:msgbox "VBScript Executed!"'>Click me for VBScript!</a> 

Nota: Sono consapevole che questo è un caso d'angolo, ma è è un utilizzo effettivo dell'etichetta javascript: (possiamo ancora chiamarla etichetta in questo contesto?) che ho riscontrato durante la creazione di HTA in linguaggio misto.

+2

Un po 'fuori tema, come la questione originale è su come utilizzare l'etichetta in pianura codice javascript, ma è comunque interessante vedere come Internet Explorer weired può essere;). – sitifensys