As we discussed on IM, the parent.document || part would be untennable
(since it would make all iframed copies of jQuery incapable of operating
within the frame itself).
Would the resulting change,
(function(document){
})(document);
be acceptable?
--John
On Tue, Jul 14, 2009 at 11:32 AM, Andrea Giammarchi <
[email protected]> wrote:
> Solved: jQuery In A Sandbox
>
> Guys, forget all that crap I wrote precedent emails ... I did not think
> about a truly simple change that will not affect anything, will be extremely
> simple to maintain, and will make jQuery automatically "sandboxable"
>
> This is my latest snippet via Elsewhere:
>
> // the callback you would use for ready (with $ as jQuery
> argument)
> function onDocumentReady($){
> $("body").html("test");
> };
>
> new Elsewhere("jquery-1.3.2.js")
> .execute(function(onDocumentReady){
> (parent.jQuery = jQuery)(function(){
> onDocumentReady(jQuery);
> });
> }, [
> onDocumentReady
> ])
> ;
>
> That's it ... and this is all I have done to jQuery library itself:
>
> line 12, begninning of the closure ...
> (function(*document*){
>
> line 4376, the end of the closure and its call:
>
> })(*parent.document || document*);
>
> With this ridiculous change, jQuery becomes instantly loadable via iframe
> or main document.
>
> Best Regards,
> Andrea Giammarchi
>
>
> On Mon, Jul 13, 2009 at 2:43 PM, Andrea Giammarchi <
> [email protected]> wrote:
>
>> Last summary ... this code is the best I have tried so far but I still
>> miss the jQuery init method cause I am forcing it via an array returned by
>> Sizzle
>>
>> parent.jQuery = (function(){
>> function $jQuery(){};
>> function $(selector, context){
>> return init.call(new $jQuery, Sizzle(selector, context ||
>> document));
>> };
>> var document = parent.document,
>> init = jQuery.fn.init,
>> Sizzle = jQuery.find,
>> k
>> ;
>> for(k in jQuery)
>> $[k] = jQuery[k]
>> ;
>> $.prototype = $jQuery.prototype = jQuery.fn;
>> return $;
>> })();
>>
>> all this stuff does not make sense if i introduced in-scope document and I
>> set it in the sandbox ( in any case if I create a sandbox for jQuery it does
>> not make sense to redefine it more than once, agree? )
>>
>> jQuery.setDefaultDocument(parent.document);
>> parent.jQuery = jQuery;
>>
>> that's it, I prefer much more latest snippet. In both case the injected
>> ready method cause an error. In few words that method assumes the body is
>> ready. I do not remember why the body is necessary, I tried with
>> documentElement and I obtained same results.
>>
>> Can anybody refresh my memory explaining me the reason there is an
>> injected 0 index callback by default in bindReady?
>>
>> Thanks
>>
>>
>> On Mon, Jul 13, 2009 at 10:23 AM, Andrea Giammarchi <
>> [email protected]> wrote:
>>
>>> As quick update, I successfully tested this code from the sandbox:
>>>
>>> parent.jQuery = (function(){
>>> var $ = Function(),
>>> document = parent.document,
>>> init = jQuery.fn.init,
>>> Sizzle = jQuery.find
>>> ;
>>> $.prototype = jQuery.fn;
>>> return function(selector, context){
>>> return init.call(new $, Sizzle(selector, context || document));
>>> };
>>> })();
>>>
>>> from the parent document and with these selectors:
>>>
>>> jQuery("#test").html("Select By Id");
>>> jQuery(".test").html("Select By class");
>>> jQuery("div:eq(2)").html("Select By Tag Name");
>>>
>>> everything worked perfectly except an error with jQuery on line 3230
>>>
>>> 3225 // document.body must exist before we can do this
>>> 3226 jQuery(function(){
>>> 3227 var div = document.createElement("div");
>>> 3228 div.style.width = div.style.paddingLeft = "1px";
>>> 3229
>>> 3230 document.body.appendChild( div );
>>> 3231 jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
>>> 3232 document.body.removeChild( div ).style.display = 'none';
>>> 3233 });
>>>
>>> ... any clue?
>>>
>>> Regards
>>>
>>
>>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"jQuery Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---