- From: Garrett Smith <dhtmlkitchen@gmail.com>
- Date: Thu, 6 Aug 2009 00:08:36 -0700
- To: Darin Adler <darin@apple.com>
- Cc: Jonas Sicking <jonas@sicking.cc>, Joćo Eiras <joaoe@opera.com>, "~:'' ???????????" <j.chetwynd@btinternet.com>, WebApps WG <public-webapps@w3.org>
2009/8/5 Darin Adler <darin@apple.com>: > On Aug 5, 2009, at 9:42 PM, Jonas Sicking wrote: > >> 2009/8/1 Joćo Eiras <joaoe@opera.com>: >>> >> >>>> How can one in a script check for UA support? >>>> else if(localStorage){} >>>> does not work for Opera**. >>> >>> This obviously does not work because you need to prefix localStorage with >>> window "if(window.localStorage)" else the script breaks because localStorage >>> is a undefined identifier while window.localStorage looks up a property in >>> the window. Different things, specific to ecmascript itself. >> >> No, the window object is the global object where all global variables are >> defined. Try the following: >> >> <script> >> a = 10; >> alert(window.a); >> </script> > There is no variable declaration there. > I think the point is that if there is no global variable of name "x", then > "window.x" yields undefined, whereas "x" yields an exception. > > That means that one way to check for the localStorage object is: > > if (window.localStorage) { > // Code using localStorage here. > } > > If you instead do: > > if (localStorage) { > // Code using localStorage here. > } > > Then you end up with code that simply throws an exception in browsers that > dont have localStorage. > Correct. The 'typeof' operator would be another good option here. Type converting and even getting host object properties has been the source of errors in IE. For example:- javascript: var op = document.createElement("div").offsetParent; - errs in IE. The typeof operator can be used to avoid such errors. if(typeof window.localStorage != "undefined"){ // property is not undefined. } Considerations of usage context are important and relevant. Good question. > -- Darin > > > Regards, Garrett
Received on Thursday, 6 August 2009 07:09:17 UTC