2013-09-02 14 views
83

Ich stolperte über etwas seltsam, dass ich wirklich noch nie gesehen:Was ist der Punkt von "javascript:" im Code (nicht URLs)?

javascript:a=a+10; 

Die Linie korrekt zu sein scheint, oben und wertet glücklich (zumindest in Firefox) wie wenn der javascript: Teil nie gegeben.

Während ich den Zweck der alten javascript:void(...) Stil <a href=".."/> in den dunklen Zeiten von DHTML verwendet verstehe, kann ich einfach keine sinnvolle Verwendung dieses Präfixes in einfachen JavaScript-Code.

Hat es eine besondere Bedeutung?

+8

Ich kann nicht für jeden sprechen, aber ich habe ** nie ** in JS-Code gesehen. Kannst du ein Beispiel geben? (* Es könnte sehr gut funktionieren, aber es sollte keinen Einfluss haben, also würde ich gerne wissen, wo du das gesehen hast *) – h2ooooooo

+0

Wo hast du das gesehen? – reporter

+1

Wo schreiben Sie es? ist es in Anker-Tag oder wo? – pixelbyaj

Antwort

97

Die "javascript:" ist eine label. Es soll verwendet werden, um eine Schleife zu identifizieren, so dass Sie "break javascript;" verwenden können, um daraus zu brechen, aber hier missbraucht wird. Es ist harmlos, aber wahrscheinlich keine gute Idee, einer Anweisung, die keine Schleife ist, ein Label hinzuzufügen.

+0

Es ist komisch, wie sie es als offizielle Bezeichnung bezeichnen (wie von IANA), diese Art von Link-Präfixen werden [URI Scheme] genannt (http://en.wikipedia.org/wiki/URI_scheme#Unofficial_but_common_URI_schemes). Nun, es ist wahr, dass es nicht offiziell bei IANA registriert ist, aber diese Art von Namenskonvention sollte immer noch verwendet werden. –

+17

Außer dass, wie die Frage angibt, ist es nicht in einem URI, sondern in normalem Code. Wie Quentin unten anmerkt, wird es fast sicher von jemandem verursacht, der sich kopiert und einfügt, ohne zu verstehen, was sie tun. – Jules

+0

Ja, aber es wird immer noch als [URL] (http://en.wikipedia.org/wiki/Uniform_resource_locator) verwendet, auch wenn es innerhalb von href, onclick usw. verwendet wird. Ja, ich habe das bemerkt, aber ich habe mich an diese Art von Fragen gewöhnt Hier. –

52

Es ist syntaktisch gültig (es ist ein label) aber nutzlos. Es ist cargo culting verursacht von Menschen kopieren/einfügen Code ohne es zu verstehen.

+8

+1 für die Fracht Kultivierungslink :). Copy/pasting people scheint in den Mitarbeitern des Unternehmens, die für das interne Webapp-Design verantwortlich sind, weit verbreitet zu sein. – sitifensys

+10

Wäre dieser Wiki-Artikel über Cargo-Kult nicht mehr vor Ort? [1] http://en.wikipedia.org/wiki/Cargo_cult_programming – AnyOneElse

-2

Ich stimme der Nutzlosigkeit als Etikett, aber in einigen Fällen ist es immer noch nützlich. Beispielsweise müssen Sie ein kurzes Snippet aus der Adressleiste ausführen oder ein Bookmarklet schreiben. Aber in diesem Fall wird javascript: mehr wie ein Pseudo-Protokoll-Schema sein.

+7

Das ist eigentlich ganz anders. 'javascript:' am Anfang einer URL lässt den Browser den Rest der URL als JavaScript ausführen. 'javascript:' am Anfang einer Zeile * von JavaScript-Code * ist eine Bezeichnung namens '' javascript' ', genau wie 'foobar:' ist eine Bezeichnung mit dem Namen '' foobar''. Sie sind völlig unabhängig und treten in verschiedenen Kontexten auf, sehen aber ähnlich aus. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label – Peeja

12

JavaScript kann auch aus Webseiten in einer HTML Application (HTA) verwendet werden. In einer HTA ist es möglich, eine Mischung ausund JavaScript zu verwenden. Wenn Sie in Ihrer Anwendung Skripterstellung wie im folgenden verwenden, wird die Skriptsprache automatisch auf VBScript festgelegt.

<SCRIPT LANGUAGE='VBScript'> MsgBox 'Hi!'</SCRIPT> 

So ein Element mit einem JavaScript onclick -Ereignis, wie im Folgenden, wird zu einem Fehler führen.

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

Sie können dieses Problem lösen, indem Sie explizit die Sprache JavaScript gesetzt von

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

Oder in VBScript von

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

Anmerkung: Ich bin mir bewusst, das ist eine Ecke Fall, aber es ist eine tatsächliche Verwendung der javascript: Bezeichnung (können wir es immer noch eine Bezeichnung in diesem Kontext nennen?), die ich beim Erstellen von HTAs mit gemischten Sprachen angetroffen habe.

+2

Ein wenig off topic, wie die ursprüngliche Frage über die Verwendung der Bezeichnung in einfachem JavaScript-Code, aber es ist dennoch interessant zu Sehen Sie, wie weird Internet Explorer sein kann;). – sitifensys

Verwandte Themen