I don't have access to safari right now, but perhaps this might work:
self.eval(); // or window.self.eval if you can see the performance change
I remember having a similar problem with firefox a bit ago using window.eval()
and that fixed it. I ended up with:
(window.execScript || self.eval)(script);
I have a fresh post about this:
http://nullisnull.blogspot.com/2006/11/executing-scripts-with-xmlhttprequest.html
I'm curious to see if it works with Safari.
--
Brito
On 11/22/06, Paul McLanahan <[EMAIL PROTECTED]> wrote:
I just checked eval.call(window,data) on Safari 2.0.4 and it did NOT
work. The function was available immediately, but only in the scope
of the httpData function. And with window.setTimeout it was available
globally, but not immediately inside of httpData....
<grumbles:incoherrently/>
Example...
external file
========================
function gsTest(){alert("Success!!");}
========================
inside of $.httpData()
========================
window.execScript?window.execScript(data):eval.call( window, data );
gsTest();
========================
In Safari 1.3 or 2.0 the above will alert "Success!!", however,
clicking on <a href="#" onclick="gsTest()">test</a> in the document
does not work.
inside of $.httpData()
========================
window.execScript?window.execScript(data):jQuery.browser.safari
?window.setTimeout(data,0):eval.call(
window, data );
gsTest();
========================
In Safari 1.3 or 2.0 the above will NOT alert "Success!!" immediately.
It will throw an error. But, clicking on a link like <a href="#"
onclick="gsTest()">test</a> in the document will work.
Anyone got any ideas? I'm fresh out. If we can't solve this, then I
suggest we keep the window.setTimeout in there for Safari since I
believe that global availability will be the feature most often used
and the 10ms problem will be encountered very rarely. I completely
agree with Jörn that it should be documented in the code of the
function.
On 11/22/06, Jörn Zaefferer <[EMAIL PROTECTED]> wrote:
> Paul McLanahan schrieb:
> > jQuery.gEval = function(data){
> > if(window.execScript) // msie
> > window.execScript(data);
> > else if(jQuery.browser.safari) // safari
> > window.setTimeout(data,0);
> > else // all others
> > eval.call( window, data );
> > }
> >
> > What do you guys think? Works in all my tests so far, but again, I
> > don't have SVN access here so.... I'm SOL as far as the sweet new test
> > suite goes.
> >
> Looks good for me. We should note somewhere that the evaluation is
> asynchronous for Safari. If anyone actually happens to stumble about
> that problem, it's nice to have it documented.
>
> Could you please check Safari 2.x? It would be nice to use eval.call()
> if possible...
>
> --
> Jörn Zaefferer
>
> http://bassistance.de
>
>
> _______________________________________________
> jQuery mailing list
> [email protected]
> http://jquery.com/discuss/
>
_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/
--
Francisco Brito
software: http://nullisnull.blogspot.com
photography: http://www.flickr.com/photos/darkgoyle
everything else: http://brito.mindsay.com
_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/