Tornando null
è la expected behavior se il contesto richiesto non è disponibile, o se la tela è già stato assegnato a un diverso tipo di contesto:
Restituisce null
se il dato ID contesto non è supportata, se la tela è già stata inizializzata con l'altro tipo di contesto (ad esempio, provare per ottenere un contesto "2d" dopo aver ottenuto un contesto "webgl").
ci sono casi particolari in cui un'eccezione può essere lanciata correlate a scenari di proxy (ibid):
genera un'eccezione InvalidStateError
se sono stati utilizzati i setContext()
o transferControlToProxy()
metodi.
In aggiunta a ciò, anche se un browser può supportare un certo tipo di contesto non v'è alcuna garanzia che l'oggetto può essere creato se le risorse di sistema come la memoria sono bassi nel qual caso sarebbe ritornato null
.
Here is an overview di ciò che verrà restituito in diversi (comuni) scenari.

Quindi, a meno che non si sta utilizzando i trasferimenti proxy (che non è esattamente ampiamente supportati in questo momento) non c'è bisogno di utilizzare try-catch
con getContext()
.
Suggerimento: in futuro la tela avrà una proprietà probablySupportsContext()
che può essere utilizzata prima dello getContext()
. Questo farà questi test e tornare false
se le condizioni non sono soddisfatte (contesto supportato, già in uso con diversi tipi contesto, poche risorse, ecc):
var supported = canvas . probablySupportsContext(contextId [, ... ])
Restituisce false se chiamando getContext()
gli stessi argomenti avrebbero restituisce definitivamente null e true altrimenti.
Aggiornamento Volevo solo approfondire un caso speciale - per fornitore specifico interni è in teoria possibile ottenere un'eccezione sollevata a seconda che molto specifica estensione e come si definisce il suo comportamento. Ma questi sono e non dovrebbero essere considerati parte dello standard e dal momento che sono sperimentali nella maggior parte dei casi, è implicito un comportamento a rischio e non standard.
Sì, anche per me sembra così. Ma potrebbe esserci un browser che supporta contesti "2d" e nessun altro. Ma anche quando disattivo webgl, ottengo null come valore di ritorno. Con la creazione, non sono sicuro se ci possa essere un'eccezione, dal momento che document.createElement ("qualcosa") per me restituisce undefined senza eccezioni. –
non un duplicato ma correlato, http://stackoverflow.com/questions/36565598/webglcontextcreationerror-event-is-it-triggered-synchronously/36566263#36566263 Inoltre, il fatto che questo evento esista significa sì, browser ** può ** lanciare un errore. – Kaiido
Grazie per il link. Sapevo dell'evento "webglcontextcreationerror". Non sono sicuro al 100% per cento della terminologia qui, ma direi che non si tratta di un errore, dal momento che non riesco a prenderlo (con try/catch) in un altro posto. Direi, questo è un evento regolare, che è chiamato occasionalmente "... errore". Ma per favore, qualcuno mi corregga, se sbaglio qui, –