Namespacing jQuery/jQueryUi into markup that I don't control I have a project that I've been trying to get just right for the past three months and it's still not quite there yet.

I'm injecting some jQuery and jQueryUI code into pages that I have no control over and I need to be able to "sandbox" my code away from anything that may or may not be there at DOM-ready, or at anytime there after...

I think I've got it, but I know there's most likely some edge cases and race conditions that I'm missing. Please fork this and tell me what I've missed.  I'm tired of spinning my wheels on this issue.

Markup:

&lt;!DOCTYPE html&gt;
&lt;html&gt;

  &lt;head&gt;
    &lt;link rel="stylesheet" href="style.css" /&gt;
    &lt;link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" /&gt;

    &lt;script type="text/javascript" src="//www.litmos.com/wp-includes/js/jquery/jquery.js?ver=1.11.0"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"&gt;&lt;/script&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;h1&gt;Loading multiple versions of jQuery!&lt;/h1&gt;
    &lt;script type="text/javascript"&gt;
      ;(function($){
        var $h2 = $('&lt;h2&gt;').append('Original jQuery: ' + $.fn.jquery + ' | Original ui: ' + $.ui.version);
        document.write($h2[0].outerHTML);
      })(jQuery);
    &lt;/script&gt;
    &lt;div&gt;Some other html&lt;/div&gt;

  &lt;!--// Code that is being "injected into the page" //--&gt;

    &lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
      ;(function($){
        window.myJQuery = jQuery.noConflict(true);
      })(jQuery);
    &lt;/script&gt;
    &lt;script src="jquery-ui.js"&gt;&lt;/script&gt;
    &lt;script src="script.js"&gt;&lt;/script&gt;

  &lt;!--// End injection code //--&gt; 

    &lt;script type="text/javascript"&gt;
      ;(function($){
        var $h2 = $('&lt;h2&gt;').append('Original jQuery: ' + $.fn.jquery + ' | Original ui: ' + $.ui.version + ' | After namespacing');
        document.write($h2[0].outerHTML);
        window.setTimeout(function(){
          $('h2').not('.namespaced')
            .addClass('not-namespaced')
            .hide()
            .draggable()
            .toggle( "highlight" );
        }, 2000);
      })(jQuery);
    &lt;/script&gt;
  &lt;/body&gt;

&lt;/html&gt;


JavaScript:

;(function($, jQuery){

  var $h2 = $('&lt;h2 class="namespaced"&gt;').append('Namespaced $: ' + $.fn.jquery + ' | $.ui: ' + $.ui.version);
  document.write($h2[0].outerHTML);

  var $jh2 = $('&lt;h2 class="namespaced"&gt;').append('Namespaced jQuery: ' + jQuery.fn.jquery + ' | jQuery.ui: ' + jQuery.ui.version);
  document.write($jh2[0].outerHTML);

  //Verify that jQueryUi works on OUR version of jQuery:
  $(document).ready(function(){
    console.log($('h2.namespaced').draggable());
  });

})(myJQuery, myJQuery);
I've worked for a media company where ads had to run with their own version of JavaScript libraries, in the end we preferred to let ads run in their own iframe. Especially since some ads required access to document.write which creates havoc to your content ;)

It is a bit scary that your solution has to modify jquery-ui.js, I would be very (very) hesitant to do that. I also dont understand why you employ })(myJQuery, myJQuery); there, since you know you only need 1 of the parameters to initialize jQuery UI.

The worst part is that I played around a bit with a fork and I could not get to a superior solution easily, so if this works for you, then perhaps you should stop researching and just go forth ;)