There is also the magic eval() method in Firefox which allows an
additional parameter to be specified as the context (see
http://ajaxian.com/archives/evalfooa-objfn-how-you-arent-private-in-firefox)

e.g.

eval(script, $wnd);

-Ray


On Thu, Mar 5, 2009 at 2:10 PM, Matt Mastracci <[email protected]> wrote:
>
> Lex,
>
> Have you tried using the string constructor for Function()?  I believe
> that it creates a function whose lexical scope is bound to the top-
> level, no matter where it is executed.
>
> <script>
> var a = 2;
>
> function x() {
>   var a = 3;
>   return new Function("alert(a); a = 4;");
> }
>
> x()();
> alert(a);
>
> function y() {
>   var a = 10;
>   x()();
> }
> y();
> </script>
>
> This alerts "2", "4", "4"  in Firefox, Safari, Opera and IE6.
>
> On 5-Mar-09, at 1:19 PM, Lex Spoon wrote:
>
>>
>> For possible amusement, I spent half a day yesterday spelunking into
>> the world of various ways to install code in a web browser.  Details
>> are here:
>>
>> http://lexspoon.blogspot.com/2009/03/many-scopes-of-javascripts-eval.html
>>
>>
>> My initial idea to use window.eval turns out to be terribly
>> non-portable: it only evaluates at window scope on Firefox.  Instead,
>> I'm thinking to use the following code to install newly downloaded
>> code:
>>
>> if (window.execScript) {
>>  window.execScript(script)
>> } else {
>>  var tag = document.createElement("script")
>>  tag.type = "text/javascript"
>>  tag.text = script
>>  document.getElementsByTagName("head").item(0).appendChild(tag)
>> }
>>
>>
>> The first branch is for window.execScript, which is available on IE
>> and, of all things, Chrome.  They are such similar browsers, you know.
>> The second branch works on all browsers, but it's ugly enough that I
>> didn't want it to be used all the time.  Maybe that's silly, and only
>> the second branch should always be used.
>>
>> Any thoughts or better ideas?
>>
>> Lex
>>
>> >
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to