2016-04-18 24 views
5

क्या निम्न कोड कभी भी एक त्रुटि फेंक सकता है?क्या प्रतिपादन संदर्भ बनाने का प्रयास करते समय ब्राउज़र त्रुटियों को फेंक सकता है?

var canvas = document.createElement("canvas"); 

var ctx = canvas.getContext("somethingwrong"); 

क्रोमियम में, यह सिर्फ शून्य हो जाता है।

यह कैसे होगा यदि अनुरोधित प्रतिपादन संदर्भ ब्राउज़र पर ज्ञात है? ("वेबगल" या "प्रयोगात्मक-वेबग्ल" की तरह) क्या त्रुटि अपवाद की संभावना है? क्रोमियम में मैं इस व्यवहार को उत्तेजित नहीं कर सका।

दूसरे शब्दों में: क्या मुझे इस कोड को लाइब्रेरी में एक कोशिश/पकड़ में लपेटने की ज़रूरत है जो एक प्रतिपादन संदर्भ के लिए स्पष्ट रूप से जांचता है?

क्या इसका उद्देश्य करने का कोई तरीका हो सकता है? जैसे एक वेब सेवा द्वारा जो विभिन्न ब्राउज़रों में छीनने वाले कोड की कोशिश करता है और उनके संभावित परिणामों को सूचीबद्ध करता है।

+0

हाँ, मेरे लिए यह भी ऐसा दिखता है। लेकिन एक ब्राउज़र "2 डी" संदर्भों का समर्थन कर सकता है और कोई अन्य नहीं। लेकिन जब भी मैं वेबग्ल को अक्षम करता हूं, तो मुझे रिटर्न वैल्यू के रूप में शून्य मिलता है। सृजन के साथ, मुझे यकीन नहीं है कि कोई अपवाद हो सकता है, क्योंकि document.createElement ("something") मेरे लिए अपवाद के बिना अपरिभाषित है। –

+0

डुप्ली नहीं बल्कि संबंधित, http://stackoverflow.com/questions/36565598/webglcontextcreationerror-event-is-it-triggered-synchronously/36566263#36566263 इसके अलावा, यह तथ्य मौजूद है कि यह घटना मौजूद है जिसका अर्थ है हाँ, ब्राउज़र ** ** एक त्रुटि फेंक सकते हैं। – Kaiido

+1

लिंक के लिए धन्यवाद। मैं "webglcontextcreationerror" घटना के बारे में जानता था। मैं यहाँ शब्दावली के बारे में 100% प्रतिशत निश्चित नहीं हूं, लेकिन मैं तर्क दूंगा कि यह कोई त्रुटि नहीं फेंक रहा है, क्योंकि मैं इसे किसी अन्य स्थान पर नहीं पकड़ सकता (कोशिश/पकड़ने के साथ)। मैं कहूंगा, यह एक नियमित घटना है, जिसे ocasionally "... त्रुटि" कहा जाता है। लेकिन कृपया, कोई मुझे सही करे, अगर मैं यहां गलत हूं, –

उत्तर

2

null रिटर्निंग expected behavior है यदि अनुरोध संदर्भ उपलब्ध नहीं है, या यदि कैनवास पहले से ही संदर्भ के एक अलग प्रकार के लिए सौंपा गया है:

रिटर्न null दिया संदर्भ आईडी समर्थित नहीं है, तो, अगर कैनवास को पहले से ही अन्य संदर्भ प्रकार (जैसे को "वेबग्ल" संदर्भ प्राप्त करने के बाद "2 डी" संदर्भ प्राप्त करने के लिए प्रारंभ किया गया है)।

एक InvalidStateError अपवाद अगर setContext() या transferControlToProxy() तरीकों का इस्तेमाल किया गया है फेंकता:

विशेष मामलों में जहां एक अपवाद प्रॉक्सी परिदृश्यों (ibid) से संबंधित फेंक दिया जा सकता है।

इसके अलावा, भले ही एक ब्राउज़र संदर्भ से एक खास प्रकार की कोई गारंटी नहीं है कि वस्तु अगर इस तरह के स्मृति के रूप में सिस्टम संसाधन कम जिस स्थिति में null लौटा दिया जाएगा रहे हैं बनाया जा सकता है वहाँ का समर्थन कर सकते हैं।

Here is an overview अलग-अलग (सामान्य) परिदृश्यों में क्या वापस किया जाएगा।

http://i.imgur.com/zqeZxv8.png

तो जब तक आप प्रॉक्सी स्थानान्तरण (जो वास्तव में व्यापक रूप से इस समय समर्थित नहीं है) का उपयोग कर रहे आप getContext() साथ try-catch उपयोग करने की आवश्यकता नहीं है।

युक्ति: भविष्य में कैनवास को probablySupportsContext() संपत्ति मिल जाएगी जिसका उपयोग getContext() से पहले किया जा सकता है। यह (पहले से ही अलग संदर्भ प्रकार, कम संसाधनों आदि के साथ उपयोग में समर्थित संदर्भ,) इन परीक्षणों करते हैं और false वापसी अगर शर्तों को पूरा नहीं कर रहे हैं:

var supported = canvas . probablySupportsContext(contextId [, ... ]) 

रिटर्न झूठी ही तर्क के साथ getContext() बुला अगर होगा निश्चित रूप से शून्य वापस आते हैं, और अन्यथा सच है।विक्रेता विशिष्ट एक्सटेंशन यह संभव सिद्धांत एक अपवाद है कि बहुत विशिष्ट एक्सटेंशन और यह कैसे अपने व्यवहार को परिभाषित करता पर निर्भर करता है फेंक दिया पाने के लिए है के लिए -

अद्यतन बस एक विशेष मामले पर विस्तृत करना चाहता था। लेकिन इन्हें मानक का हिस्सा नहीं माना जाना चाहिए और चूंकि वे ज्यादातर मामलों में प्रयोगात्मक हैं, इसलिए जोखिम और गैर-मानक व्यवहार का अर्थ है।

+0

यह एक बहुत ही उपयोगी पोस्ट था। यह मेरे अनुमान की पुष्टि करता है, कि यहां एक कोशिश/पकड़ आवश्यक नहीं है (बशर्ते कि कोई प्रॉक्सी गणना का उपयोग न किया जाए)। "प्रयोगात्मक-वेबलॉग" जैसे "विक्रेता-विशिष्ट एक्सटेंशन" के बारे में एकमात्र संदेह बनी हुई है। लेकिन शायद उन लोगों के अंदर त्रुटियों को "webglcontextcreationerror" घटना द्वारा पकड़ा जाएगा। –

+0

बस पूर्णता के लिए: ख्रोनोस समूह के आधिकारिक रेपो में, एक वेबलॉग संदर्भ बनाने के लिए रैपर वास्तव में एक कोशिश/पकड़ का उपयोग कर रहा है। इससे मुझे आश्चर्य हुआ। https://github.com/KhronosGroup/WebGL/blob/master/sdk/demos/common/webgl-utils.js –

संबंधित मुद्दे

 संबंधित मुद्दे