[483] | 1 | (function(){ |
---|
| 2 | var file; |
---|
| 3 | var head = document.documentElement.firstChild; |
---|
| 4 | while(head && head.tagName != "HEAD"){ |
---|
| 5 | head = head.nextSibling; |
---|
| 6 | } |
---|
| 7 | var script = head.lastChild; |
---|
| 8 | while(script){ |
---|
| 9 | if(script.tagName == "SCRIPT"){ |
---|
| 10 | if((script.getAttribute('src')||'').search('_loadTest') >= 0 && (!script.readyState || script.readyState == "interactive")){ |
---|
| 11 | file = script.getAttribute('file'); |
---|
| 12 | break; |
---|
| 13 | } |
---|
| 14 | } |
---|
| 15 | script = script.previousSibling; |
---|
| 16 | } |
---|
| 17 | if(!file && window.location.href.search(/[?&]file[=]/i) > 0){ |
---|
| 18 | file = window.location.href.replace(/.*[?&]file=(([^&?]*)).*/i, "$2"); |
---|
| 19 | } |
---|
| 20 | var readFile = function(file){ |
---|
| 21 | var xhr = null; |
---|
| 22 | try{ |
---|
| 23 | xhr = new XMLHttpRequest(); |
---|
| 24 | }catch(e0){ |
---|
| 25 | try{ |
---|
| 26 | xhr = new ActiveXObject('Msxml2.XMLHTTP'); |
---|
| 27 | }catch(e1){ |
---|
| 28 | try{ |
---|
| 29 | xhr = new ActiveXObject('Microsoft.XMLHTTP'); |
---|
| 30 | }catch(e2){ |
---|
| 31 | try{ |
---|
| 32 | xhr = new ActiveXObject('Msxml2.XMLHTTP.4.0'); |
---|
| 33 | }catch(e3){ |
---|
| 34 | } |
---|
| 35 | } |
---|
| 36 | } |
---|
| 37 | } |
---|
| 38 | try{ |
---|
| 39 | xhr.open("GET", file, false); |
---|
| 40 | xhr.send(null); |
---|
| 41 | }catch(e){ |
---|
| 42 | return null |
---|
| 43 | } // file not found |
---|
| 44 | return xhr.responseText; |
---|
| 45 | }; |
---|
| 46 | var text = readFile(file) || (file + " not found"); |
---|
| 47 | var baseHref = file.replace(/^(.*\/)?[^\/]+$/, "$1"); |
---|
| 48 | if(baseHref){ |
---|
| 49 | baseHref = window.location.href.replace(/[?].*/, "").replace(/[^\/]*$/, "")+baseHref; |
---|
| 50 | text = text.replace(/(<HEAD\b([^>]|\s)*>)/i, "$1" + "<BASE href='" + baseHref + "'><\/BASE>"); |
---|
| 51 | } |
---|
| 52 | // strip DOCTYPE and HTML tag |
---|
| 53 | text = text.replace(/^(.|\s)*?<html\b(([^>]|\s)*)>((.|\s)*)/i, |
---|
| 54 | function(s,a1,htmlAttrs,a3,content){ |
---|
| 55 | // add attributes from target file's HTML tag - may not be necessary but we'll do it anyway for completeness |
---|
| 56 | htmlAttrs = htmlAttrs.replace(/((\w+)\s*=\s*(['"]?)(.*?)(\3)?(\s+|$))/g, |
---|
| 57 | function(s, all, attr, quote, val){ |
---|
| 58 | document.documentElement.setAttribute(attr, val); |
---|
| 59 | return ""; |
---|
| 60 | }); |
---|
| 61 | return content.replace(/<\/html\b([^>]|\s)*>(.|\s)*?$/i, ""); |
---|
| 62 | }); |
---|
| 63 | if(/MSIE/.test(navigator.userAgent)){ // need to load scripts serially |
---|
| 64 | document._oldgetElementsByTagName_ = document.getElementsByTagName; |
---|
| 65 | document.getElementsByTagName = function(tag){ |
---|
| 66 | // take over getElementsByTagName so I can take over script.getAttribute('src') |
---|
| 67 | if(/^script$/i.test(tag)){ |
---|
| 68 | var scripts = document.scripts; |
---|
| 69 | for(var i=0; i <scripts.length; i++){ |
---|
| 70 | (function(script){ |
---|
| 71 | if(!('_oldGetAttribute' in script)){ |
---|
| 72 | var src = script.getAttribute('_oldsrc'); |
---|
| 73 | if(src){ |
---|
| 74 | script._oldGetAttribute = script.getAttribute; |
---|
| 75 | script.getAttribute = function(attr){ return /^src$/i.test(attr) ? src : script._oldGetAttribute(attr); }; |
---|
| 76 | } |
---|
| 77 | } |
---|
| 78 | }).call(this, scripts[i]); |
---|
| 79 | } |
---|
| 80 | return scripts; |
---|
| 81 | } |
---|
| 82 | return document._oldgetElementsByTagName_(tag); |
---|
| 83 | }; |
---|
| 84 | document._oldwrite_ = document.write; |
---|
| 85 | document.write = function(text){ |
---|
| 86 | text = text.replace(/<[!][-][-](.|\s){5,}?[-][-]>/g, "<!--?-->" // shorten long comments that may contain script tags |
---|
| 87 | ).replace(/(<script\s[^>]*)\bsrc\s*=\s*([^>]*>)/ig, |
---|
| 88 | function(s,pre,post){ |
---|
| 89 | if(s.search(/\sdefer\b/i) > 0){ return s; } |
---|
| 90 | //if(s.search(/\bxpopup.js\b/i) > 0){ return pre+">"; } // firewall popup blocker: uncomment if you get out of stack space message |
---|
| 91 | var file = post.substr(0, post.search(/\s|>/)).replace(/['"]/g, ""); |
---|
| 92 | var scriptText = readFile(baseHref+file); |
---|
| 93 | if(!scriptText){ |
---|
| 94 | scriptText = readFile(file); |
---|
| 95 | if(!scriptText){ return s; } |
---|
| 96 | } |
---|
| 97 | return pre + " _oldsrc=" + post + "eval(unescape('"+escape(scriptText)+"'))"; |
---|
| 98 | }); |
---|
| 99 | document._oldwrite_(text); |
---|
| 100 | }; |
---|
| 101 | } |
---|
| 102 | document.write(text); |
---|
| 103 | })(); |
---|