google-api schlüssel - Müssen Sie in einem Onclick jemals 'javascript:' angeben?




maps example (8)

AFAIK, Sie müssen das Protokoll niemals in einem Onclick angeben:

onclick="javascript:myFunction()" Schlecht

onclick="myFunction()" Gut

Heute habe ich in diesem Artikel auf Google Analytics festgestellt, dass sie es verwenden:

<a href="http://www.example.com" onClick="javascript: pageTracker._trackPageview('/outgoing/example.com');">

Ist dieses Beispiel einfach falsch oder gibt es überhaupt einen Grund, javascript: zu spezifizieren javascript: in etwas anderem als einem href ?


Answers

Ich habe immer geglaubt, dass es eine schlechte Verwendung war, weil JavaScript innerhalb einer URL mit dem Präfix javascript: aufgerufen werden kann:

<a href="javascript:void(alert('really bad usage!'))">

( Web Forms , jemand?)

Und nur unwissende Webentwickler, die den Unterschied zwischen einer Event-Deklaration und einer Href-Deklaration nie realisiert haben, benutzten sie.

Ich würde sagen, dass selbst Event-Attribute heutzutage in den meisten Fällen eine schlechte Übung sind, und der bevorzugte Weg, ein Event zu erreichen, ist die Verwendung von .attachEvent (Internet Explorer) und addEventListener (der Rest der Browser wie üblich).

Und schließlich ... Google ist nicht immer Gott allmächtig. Sie neigen dazu, sich mehr darum zu kümmern, dass Dinge funktionieren, statt ständig den Standards zu folgen.


Einige der Antworten hier behaupten, dass das Präfix "javascript:" ein "Überbleibsel aus den alten Tagen" ist, was bedeutet, dass es absichtlich speziell von den Browsern für die Abwärtskompatibilität gehandhabt wird. Gibt es eindeutige Beweise, dass dies der Fall ist (hat jemand den Quellcode überprüft)?

<span onclick="javascript:alert(42)">Test</span>

Das liest sich für mich wie folgt:

javascript:
    alert(42);

Das bedeutet, dass "javascript:" nur ein Label ist und keine Wirkung hat. Das funktioniert auch:

<span onclick="foobar:alert(42)">Test</span>

Aktualisieren:

Ich habe ein kleines Experiment gemacht und es stellt sich heraus, dass, ja, "javascript:" wird speziell vom IE behandelt, aber definitiv nicht so von Firefox, Safari, Opera oder Chrome:

<span onclick="javascript:while (true) { alert('once'); break javascript; }">Test</span>

Auf Nicht-IE wird dies nur "einmal", einmal und dann aus der Schleife ausbrechen. Im IE bekomme ich einen Fehler "Label nicht gefunden". Folgendes funktioniert in allen Browsern einwandfrei:

<span onclick="foo:while (true) { alert('once'); break foo; }">Test</span>

Update 2:

Ich habe gerade festgestellt, dass der Link http://crisp.tweakblogs.net/blog/the-useless-javascript-pseudo-protocol.html in einer der obigen Antworten so ziemlich über dasselbe spricht.


In Internet Explorer ist es möglich, die Standardsprache für eine Seite auf VBScript festzulegen. In den frühen Tagen gab es immer die Idee, dass eine andere Sprache für das Scripting in einem Browser verwendet werden könnte. Wie sich herausgestellt hat, hat sich keine solche Sprache in substantieller Form materialisiert.

Ich störe mich nicht mit diesem Sprachpräfix.


Zu Beginn konnten Sie VBScript in Internet Explorer anstelle von JavaScript verwenden, also war die Angabe von "javascript: ..." Standard.

Heute, nun, es tut nicht weh ... Es könnte in Zukunft immer eine andere Möchtegern-Browser-Skriptsprache geben.


Ich denke, das Präfix "javascript:" ist ein Überbleibsel aus alten Zeiten, als es noch die vage Möglichkeit gab, dass etwas anderes als JavaScript das Ereignis behandeln könnte.

Heute ist es optional und wird aus Gründen der Rückwärtskompatibilität beibehalten. Aber ich würde nicht sagen, dass es schlecht ist , es ist einfach unnötig.



Es ist eine gute Übung für Ihren Wartungsprogrammierer. Der Compiler kennt den Unterschied, aber dieser junge, gerade aus dem College stammende Webentwickler kann es nicht.


Suchen Sie den index des Arrayelements, das Sie entfernen möchten, und entfernen Sie dann den Index mit dem splice .

Die splice () -Methode ändert den Inhalt eines Arrays, indem vorhandene Elemente entfernt und / oder neue Elemente hinzugefügt werden.

var array = [2, 5, 9];
console.log(array)
var index = array.indexOf(5);
if (index > -1) {
  array.splice(index, 1);
}
// array = [2, 9]
console.log(array);

Der zweite Parameter des splice ist die Anzahl der zu entfernenden Elemente. Beachten Sie, dass der splice das Array an Ort und Stelle ändert und ein neues Array mit den entfernten Elementen zurückgibt.

Hinweis : Die Browserunterstützung für indexOf ist begrenzt. Es wird nicht in Internet Explorer 7 und 8 unterstützt.

Wenn Sie indexOf in einem nicht unterstützten Browser benötigen, versuchen Sie es mit dem folgenden polyfill . Weitere Informationen zu diesem polyfill hier .

Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) {
    var a;
    if (null == this) throw new TypeError('"this" is null or not defined');
    var c = Object(this),
        b = c.length >>> 0;
    if (0 === b) return -1;
    a = +e || 0;
    Infinity === Math.abs(a) && (a = 0);
    if (a >= b) return -1;
    for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) {
        if (a in c && c[a] === d) return a;
        a++
    }
    return -1
});




javascript google-api