Hat jemand Erfahrung mit dem Überschreiben der alert()
Funktion in JavaScript?
- Welche Browser unterstützen dies?
- Welche Browserversionen unterstützen dies?
- Was sind die Gefahren beim Überschreiben der Funktion?
javascript
overriding
cllpse
quelle
quelle
_alert
Antworten:
Es ist definitiv "unterstützt". Es ist Ihre Webseite, Sie machen damit, was Sie wollen.
Ich habe dies bereits getan, um Analyseereignisse zu verfolgen, ohne eine Bibliothek zu ändern, sondern indem ich mich in Ereignisse eingeschlichen habe.
Verwenden Sie das Proxy-Muster:
Sie können den Aufruf der ursprünglichen Funktion auch umgehen, wenn Sie möchten (Proxy)
Weitere Informationen hier: JQuery Types #Proxy Pattern
quelle
apply()
istwindow.alert
in Internet Explorer 8 nicht verfügbar .apply
eine Methode desFunction
Objekts ist. Also müssen sie es explizit einschränken füralert
?!Obwohl die meisten Browser das Überschreiben unterstützen, sollten Sie vorsichtig sein, was Sie damit tun.
Da das Standard-Warnfeld den Ausführungsthread blockiert, funktionieren einige Bibliotheken, die auf diesem Verhalten basieren, möglicherweise (bestenfalls) nicht mehr.
Sie sollten ein guter Bürger sein und vermeiden, die native API zu berühren. Wenn Sie dies tun, können Sie bei Verwendung von Code von Drittanbietern Probleme lösen.
Wenn Sie jedoch das Warnverhalten in einem bestimmten Kontext neu definieren möchten, können Sie es mit einer anonymen Funktion wie der folgenden einschließen:
quelle
Die Overring-Alarmfunktion birgt keine Gefahren. Jeder Browser unterstützt es.
beispielsweise:
quelle
alert("Reloading")
die Webseite aufruft und dann neu lädt. Der Warnungstext wird vom Benutzer möglicherweise nie gesehen.Ich denke, jede Javascript-Implementierung wird dies unterstützen, und es besteht keine Gefahr damit. Es ist üblich, die einfachen Warnboxen im OS-Stil durch HTML / CSS durch etwas Eleganteres zu ersetzen. Auf diese Weise müssen Sie den vorhandenen Code nicht ändern! Die Tatsache, dass es möglich ist, macht Javascript großartig.
quelle
Wie in vielen anderen Antworten erwähnt, können Sie die Funktion einfach mit überschreiben
oder
Dies überschreibt jedoch nicht unbedingt die Funktion des Prototyps des
Window
Konstruktors (beachten Sie das GroßbuchstabenW
), sodass der Hacker weiterhin Folgendes eingeben kann:Daher müssen Sie diese Funktion auch überschreiben mit:
oder
quelle
Ladislav.
Für IE8 können Sie alert () auf diese Weise neu definieren
und anrufen als
quelle
Meine Erfahrung mit dem Überschreiben der alert () -Funktion ist, dass wir sie einmal verwendet haben, um die Testversion der JavaScript-Bibliothek zu "hacken", in der "Bitte registrieren!" Angezeigt wurde. nag Bildschirm durch Alarm von Zeit zu Zeit.
Wir haben gerade unsere eigene alert () -Funktion und voila definiert.
Es war nur zu Testzwecken, wir haben später die Vollversion gekauft, also ist hier nichts Unmoralisches los ;-)
quelle
Alle JavaScript-Implementierungen in modernen Browsern unterstützen das Überschreiben.
Die Gefahren sind ganz einfach, dass Sie andere Teammitglieder absolut verrückt machen würden, indem Sie allgemein bekannte Funktionen wie alert () überschreiben.
Wenn Sie also keine Funktionen als Tool überschreiben, um vorhandenen Code auf irgendeine Weise zu debuggen oder zu hacken, sehe ich keinen Grund, dies zu tun. Erstellen Sie einfach eine neue Funktion.
quelle
Es funktioniert sicher in Firefox und IE8. Ich kann nicht sehen, dass es einen Browser geben würde, in dem es nicht funktionieren würde. Dies ist ziemlich grundlegend für die Funktionsweise von Javascript, obwohl man es nicht oft mit nativen Funktionen wie diesen verwenden sieht =)
quelle
Ein schneller Hack, den ich mache, um herauszufinden, woher die Warnungen kommen, ist, zur Konsole zu gehen und diese dann einzugeben
quelle
Wenn es um js Browserfunktionen
window.alert
geht, sind sie herausragend und am bekanntesten. Leute, die js nicht kennen, wissen esalert()
- seien Sie versichert, dass sie in allen heute verwendeten Browsern unterstützt werden und Ihr Code-Snippet auch. Ich würde jedochalert()
für einen bestimmten Anwendungsfall wie Ihren nicht überschreiben (dies ist eher ein Refactoring als ein Überschreiben im OOP-Sinne), denn wenn Sie tatsächlichalert()
ohne Vorlage verwenden müssen und dies wahrscheinlich auch tun werden, müssen Sie dies tun eine andere nicht alarmierende Funktion, um dies zu tun.quelle
Ich musste eine Standardnachricht zusammen mit den tatsächlichen Warnmeldungen anzeigen. So habe ich es geschafft.
Ich habe es auf Chrom getestet. Ich bin nicht sicher, ob es eine gute Praxis ist, aber es erfüllt den Zweck.
quelle