Die Standardmethode für Situationen, in denen der Browser das HTML5- <canvas>
Tag nicht unterstützt, besteht darin, einige Fallback-Inhalte einzubetten, z.
<canvas>Your browser doesn't support "canvas".</canvas>
Der Rest der Seite bleibt jedoch derselbe, was unangemessen oder irreführend sein kann. Ich möchte eine Möglichkeit erkennen, nicht unterstützte Zeichenflächen zu erkennen, damit ich den Rest meiner Seite entsprechend präsentieren kann. Was würden Sie empfehlen?
elem.getContext == undefined
.!undefined = true
, und!true = false
, so können wir einen Bool zurückgeben, anstatt undefiniert oder den Kontext.var i = 0
. Ich werte mit false aus, aber typeof i gibt "number" zurück. typeof !! Ich gebe "boolean" zurück.undefined ? true : false
(wenn auch etwas länger).toDataURL
. Und Opera Mini unterstützt nur einfaches Canvas-Rendering ohne Unterstützung der Text-API . Opera Mini kann auf diese Weise nur als Querverweis ausgeschlossen werden.Es gibt zwei beliebte Methoden zum Erkennen der Canvas-Unterstützung in Browsern:
Matts Vorschlag , die Existenz von zu überprüfen
getContext
, wird ebenfalls in ähnlicher Weise von der Modernizr-Bibliothek verwendet:Überprüfen der Existenz der
HTMLCanvasElement
Schnittstelle, wie in den WebIDL- und HTML- Spezifikationen definiert. Dieser Ansatz wurde auch in einem Blogbeitrag des IE 9-Teams empfohlen .Meine Empfehlung ist aus mehreren Gründen eine Variation der letzteren (siehe Zusätzliche Hinweise ):
getContext
Ansatz ist in allen Browsern erheblich langsamer , da ein HTML-Element erstellt wird. Dies ist nicht ideal, wenn Sie so viel Leistung wie möglich erzielen möchten (z. B. in einer Bibliothek wie Modernizr).Die Verwendung der ersten Methode bietet keine nennenswerten Vorteile. Beide Ansätze können gefälscht werden, dies ist jedoch nicht zufällig.
Zusätzliche Bemerkungen
Möglicherweise muss noch überprüft werden, ob ein 2D-Kontext abgerufen werden kann. Berichten zufolge können einige mobile Browser für beide oben genannten Prüfungen true zurück, aber Rückkehr
null
zu.getContext('2d')
. Deshalb prüft Modernizr auch das Ergebnis von.getContext('2d')
. WebIDL & HTML bietet uns jedoch erneut eine bessere und schnellere Option:Beachten Sie, dass wir die Überprüfung des Canvas-Elements vollständig überspringen und direkt zur Überprüfung der Unterstützung für 2D-Rendering übergehen können. Die
CanvasRenderingContext2D
Schnittstelle ist auch Teil der HTML-Spezifikation.Sie müssen den
getContext
Ansatz zum Erkennen der WebGL- Unterstützung verwenden, da der Browser, obwohl er die unterstütztWebGLRenderingContext
,getContext()
möglicherweise null zurückgibt, wenn der Browser aufgrund von Treiberproblemen keine Schnittstelle zur GPU herstellen kann und keine Softwareimplementierung vorliegt. In diesem Fall können Sie bei der ersten Überprüfung der Schnittstelle die Überprüfung überspringengetContext
:Leistungsvergleich
Die Leistung des
getContext
Ansatzes ist in Firefox 11 und Opera 11 um 85-90% langsamer und in Chromium 18 um etwa 55% langsamer.quelle
false
sowohl für Ihr als auch für mein Beispiel zurückgegeben. Es scheint, dass sie dieCanvasRenderingContext2D
Schnittstelle nicht bereitstellen . Ich konnte den S60 noch nicht testen, bin aber immer noch sehr neugierig und werde es vielleicht bald tun.Normalerweise überprüfe
getContext
ich, wann ich mein Canvas-Objekt erstelle.Wenn dies unterstützt wird, können Sie das Canvas-Setup fortsetzen und dem DOM hinzufügen. Dies ist ein einfaches Beispiel für progressive Verbesserung , das ich (persönlich) Graceful Degradation vorziehe.
quelle
, context
in der zweiten Zeile?var
Anweisung pro Funktion).Warum nicht Modernizr ausprobieren ? Es ist eine JS-Bibliothek, die Erkennungsfunktionen bietet.
Zitat:
quelle
return !!document.createElement('canvas').getContext
Das ist definitiv der beste Weg, um zu testen.quelle
Möglicherweise liegt hier ein Problem vor - einige Clients unterstützen nicht alle Canvas-Methoden.
quelle
Mit dem Skript canisuse.js können Sie feststellen, ob Ihr Browser Canvas unterstützt oder nicht
quelle
Wenn Sie den Kontext Ihrer Leinwand erhalten möchten, können Sie ihn genauso gut als Test verwenden:
quelle