TL;DR: I want to include a specific version of JQuery and a specific JQuery plugin that is associated with my inclusion of jQuery on multiple different sites where I know nothing about the JavaScript libraries/plugins used by them, without conflicts. Possible? How?
The whole story: Let's say I want to build a Reddit platform where multiple sites can link to Reddit threads by including http://myredditplatform.com/reddit.js
and having <a href="" data-reddit-thread-id="1234"></a>
elements littered on the page. Once a user clicks on a link like that, I open reddit in a beautiful modal window.
Now because I want Reddit Platform experience to be consistent across all sites that use my script, I want all sites to use my particular modal plugin and I want to style the links in my particular fashion.
But I can never be sure what Javascript library or plugins the other sites are using, so I must make sure that when reddit.js
loads JQuery, it must not conflict with other libraries on the page and when reddit.js
loads, for example, prettyPhoto
plugin it should only be associated with the jQuery library included by me.
But I also want widespread adoption for my platform, so I don't want to place any more restrictions on the sites like you must have jQuery, or you must have prettyPhoto loaded. I just want them to include this one JS file, reddit.js
which does everything for them.
Is it possible to make this work? How would you go about it?
Thanks!
Below is a stripped down version of my widget loader which does basically what you want.
The key line of code is
jquery1_8_2 = jQuery.noConflict(true);
More info here: http://api.jquery.com/jQuery.noConflict/
You could make a custom build of jQuery that doesn't clobber the globals. Have a look at the source: https://github.com/jquery/jquery/blob/master/src/exports.js. You could modify this line:
to be like this:
Then when you run your code, you need to use
myRedditPluginJquery
as$
. Something like this IIFE: