Warum ist "javascript: code" schlecht? [Duplikat]

8

Um JavaScript für ein DOM-Ereignis auszuführen, können Sie Folgendes verwenden:

%Vor%

So etwas scheint auch zu funktionieren:

%Vor%

Allerdings habe ich gehört, dass das zweite Beispiel "schlecht" ist und dass das erste Beispiel über das zweite Beispiel verwendet werden sollte.

Ist das schlimm? Wenn ja, warum ist das so schlimm? Was ist der Unterschied zwischen alert('Alert') und javascript: alert('Alert') ?

Was ist mit der Verwendung in <a> -Tags (wenn es anders ist)?

%Vor%

Bearbeiten: Um zu verdeutlichen, frage ich speziell nach dem javascript: -Teil und nicht danach, wie ich Inline-JavaScript mit meinem Markup vermischt habe. Entschuldigung wegen der Verwirrung.

    
Zhihao 25.07.2012, 18:05
quelle

2 Antworten

10

Oh, die wundervolle verwirrende Welt von JavaScript. Der Code, den Sie gepostet haben, tut wahrscheinlich nicht das, was die meisten Programmierer denken.

Es gibt einen Unterschied zwischen jeder der folgenden Zeilen:

%Vor%

obwohl sie alle Hello World! alarmieren.

Die erste (V1) hat eine inline click -Ereignisbindung über das [onclick] -Attribut. Es kann auch ein [href] -Attribut enthalten, das zu einem anderen Ort navigiert, nachdem das [onclick] -Attribut ausgeführt wurde, oder eine beliebige Anzahl anderer click -Ereignisse, die im Code gebunden sind, vorausgesetzt, das Standardverhalten wurde nicht verhindert.

Die zweite (V2) hat eine ausführbare javascript: URL als [href] Attribut gesetzt. Es kann auch ein [onclick] -Attribut oder andere click -Ereignisse enthalten, die in externen Skripten gebunden sind.

Das erste und das zweite Beispiel (V1 und V2) haben einen identischen Code, der lautet:

%Vor%

Das dritte Beispiel (V3) hat eine inline click -Ereignisbindung über das Attribut [onclick] , genau wie V1, jedoch der Code, der ausgeführt wird, ist anders. Der ausgeführte Code ist:

%Vor%

Obwohl es wie ein javascript: url aussieht, wird in JavaScript nur ein Label verwendet.

Beschriftungen in JavaScript sind nützlich, um verschachtelte Schleifen zu überspringen, wie im folgenden Beispielcode:

%Vor%

In den meisten Inline-JavaScript wird es missbraucht, weil der Autor den Unterschied zwischen den drei Formaten nicht versteht.

  

Warum wird javascript: <code> schlecht verwendet?

Das ist eine führende Frage. Es geht davon aus, dass javascript: <code> ist schlecht.

javascript: <code> ist nicht schlecht . Es ist ein Werkzeug. Werkzeuge sind nicht von Natur aus gut oder schlecht, nur die Leute, die die Werkzeuge benutzen. Du würdest einen Hammer nicht als "schlecht" bezeichnen, selbst wenn jemand ihn als Waffe benutzt hätte.

javascript: <code> hat einige nette Anwendungen. Sie sollten es in den meisten Fällen nicht verwenden, da es das falsche Tool für den Job ist , wenn Sie jedoch ein Bookmarklet schreiben , Sie wären erforderlich , um das javascript: <code> -Format zu verwenden.

Außerdem gibt es ein paar Nischenkontexte, in denen es sinnvoll wäre, Javascript inline zu lassen. Ein Beispiel dafür wäre, der Seite eine einfache print -Schaltfläche hinzuzufügen:

%Vor%

Obwohl auch dieses Beispiel leicht durch eine Klasse ersetzt werden könnte und das JavaScript externalisiert werden könnte:

%Vor%     
zzzzBov 25.07.2012, 18:20
quelle
2

Es gibt kein echtes Problem mit den javascript: -Etiketten. Es wird meistens nur als schlechter Stil betrachtet.

  • Ein onclick -handler ist bereits JavaScript, also ist das nur sinnlose, redundante Information (tatsächlich wird der Code durchsucht, der ausgeführt wird, indem ein Label namens javascript hinzugefügt wird - aber in den meisten Fällen sollte dies nicht der Fall sein) jede Wirkung).
  • JavaScript-Code in einem href -Attribut würde passender in einem onclick -Handler platziert werden, sodass Sie mit dem href einen Link für Benutzer mit deaktiviertem JavaScript bereitstellen können. Dies nennt man Progressive Enhancement .

Weitere Informationen finden Sie in diesem tollen Blogbeitrag zum Thema "Das nutzlose JavaScript: Pseudo-Protokoll"

    
oezi 25.07.2012 18:15
quelle

Tags und Links