2
schangxiang@126.com
2024-08-16 b47c50a2a514def7374b32d7194b2c599cba5625
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*! 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 );