123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /*! Respond.js: min/max-width media query polyfill. Remote proxy (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */
- (function(win, doc, undefined){
- var docElem = doc.documentElement,
- proxyURL = doc.getElementById("respond-proxy").href,
- redirectURL = (doc.getElementById("respond-redirect") || location).href,
- baseElem = doc.getElementsByTagName("base")[0],
- urls = [],
- refNode;
- function encode(url){
- return win.encodeURIComponent(url);
- }
- function fakejax( url, callback ){
- var iframe,
- AXO;
-
- // All hail Google http://j.mp/iKMI19
- // Behold, an iframe proxy without annoying clicky noises.
- if ( "ActiveXObject" in win ) {
- AXO = new ActiveXObject( "htmlfile" );
- AXO.open();
- AXO.write( '<iframe id="x"></iframe>' );
- AXO.close();
- iframe = AXO.getElementById( "x" );
- } else {
- iframe = doc.createElement( "iframe" );
- iframe.style.cssText = "position:absolute;top:-99em";
- docElem.insertBefore(iframe, docElem.firstElementChild || docElem.firstChild );
- }
- iframe.src = checkBaseURL(proxyURL) + "?url=" + encode(redirectURL) + "&css=" + encode(checkBaseURL(url));
-
- function checkFrameName() {
- var cssText;
- try {
- cssText = iframe.contentWindow.name;
- }
- catch (e) { }
- if (cssText) {
- // We've got what we need. Stop the iframe from loading further content.
- iframe.src = "about:blank";
- iframe.parentNode.removeChild(iframe);
- iframe = null;
-
- // Per http://j.mp/kn9EPh, not taking any chances. Flushing the ActiveXObject
- if (AXO) {
- AXO = null;
- if (win.CollectGarbage) {
- win.CollectGarbage();
- }
- }
- callback(cssText);
- }
- else{
- win.setTimeout(checkFrameName, 100);
- }
- }
-
- win.setTimeout(checkFrameName, 500);
- }
- function checkBaseURL(href) {
- if (baseElem && href.indexOf(baseElem.href) === -1) {
- bref = (/\/$/).test(baseElem.href) ? baseElem.href : (baseElem.href + "/");
- href = bref + href;
- }
- return href;
- }
-
- function checkRedirectURL() {
- // IE6 & IE7 don't build out absolute urls in <link /> attributes.
- // So respond.proxy.gif remains relative instead of http://example.com/respond.proxy.gif.
- // This trickery resolves that issue.
- if (~ !redirectURL.indexOf(location.host)) {
- var fakeLink = doc.createElement("div");
- fakeLink.innerHTML = '<a href="' + redirectURL + '"></a>';
- docElem.insertBefore(fakeLink, docElem.firstElementChild || docElem.firstChild );
- // Grab the parsed URL from that dummy object
- redirectURL = fakeLink.firstChild.href;
- // Clean up
- fakeLink.parentNode.removeChild(fakeLink);
- fakeLink = null;
- }
- }
-
- function buildUrls(){
- var links = doc.getElementsByTagName( "link" );
-
- for( var i = 0, linkl = links.length; i < linkl; i++ ){
-
- var thislink = links[i],
- href = links[i].href,
- extreg = (/^([a-zA-Z:]*\/\/(www\.)?)/).test( href ),
- ext = (baseElem && !extreg) || extreg;
- //make sure it's an external stylesheet
- if( thislink.rel.indexOf( "stylesheet" ) >= 0 && ext ){
- (function( link ){
- fakejax( href, function( css ){
- link.styleSheet.rawCssText = css;
- respond.update();
- } );
- })( thislink );
- }
- }
-
- }
-
- if( !respond.mediaQueriesSupported ){
- checkRedirectURL();
- buildUrls();
- }
- })( window, document );
|