- 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