|
18 | 18 | root_page = /^[^?#]*\//.exec(location.href)[0],
|
19 | 19 | root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0],
|
20 | 20 | append_to = document.head || document.getElementsByTagName("head"),
|
| 21 | + |
| 22 | + disable_xhr = !(XMLHttpRequest || ActiveXObject), // flag shared by all instances, for whether XHR failed or is invalid |
21 | 23 |
|
22 | 24 | // inferences... ick, but still necessary
|
23 | 25 | opera_or_gecko = (global.opera && Object.prototype.toString.call(global.opera) == "[object Opera]") || ("MozAppearance" in document.documentElement.style),
|
|
42 | 44 | log_msg = function(msg) { global.console.log(msg); };
|
43 | 45 | log_error = function(msg,err) { global.console.error(msg,err); };
|
44 | 46 | }
|
| 47 | + if (disable_xhr) log_msg("LABjs warning: XHR disabled after init failure."); |
45 | 48 | /*!END_DEBUG*/
|
46 | 49 |
|
47 | 50 | // test for function
|
|
183 | 186 | // same-domain, so use XHR+script injection
|
184 | 187 | else if (same_domain(src) && chain_opts[_UseLocalXHR]) {
|
185 | 188 | var xhr = XMLHttpRequest ? new XMLHttpRequest() : (ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : null);
|
186 |
| - if (!xhr) { |
187 |
| - global_defaults[_UseLocalXHR] = chain_opts[_UseLocalXHR] = false; // can't use XHR for some reason, so don't try anymore |
188 |
| - return request_script(chain_opts,script_obj,chain_group,registry_item,onload); |
189 |
| - } |
190 | 189 | /*!START_DEBUG*/if (chain_opts[_Debug]) log_msg("start script preload (xhr): "+src);/*!END_DEBUG*/
|
191 | 190 | xhr.onreadystatechange = function() {
|
192 | 191 | if (xhr.readyState == 4) {
|
|
222 | 221 | ;
|
223 | 222 |
|
224 | 223 | // global defaults
|
225 |
| - global_defaults[_UseLocalXHR] = true; |
| 224 | + global_defaults[_UseLocalXHR] = !disable_xhr; |
226 | 225 | global_defaults[_AlwaysPreserveOrder] = false;
|
227 | 226 | global_defaults[_AllowDuplicates] = false;
|
228 | 227 | global_defaults[_CacheBust] = false;
|
|
432 | 431 | wait:chainedAPI.wait,
|
433 | 432 | setOptions:function(opts){
|
434 | 433 | merge_objs(opts,chain_opts);
|
| 434 | + chain_opts[_UseLocalXHR] = chain_opts[_UseLocalXHR] && !disable_xhr; |
435 | 435 | return chainedAPI;
|
436 | 436 | }
|
437 | 437 | };
|
|
442 | 442 | // main API functions
|
443 | 443 | setGlobalDefaults:function(opts){
|
444 | 444 | merge_objs(opts,global_defaults);
|
| 445 | + global_defaults[_UseLocalXHR] = global_defaults[_UseLocalXHR] && !disable_xhr; |
445 | 446 | return instanceAPI;
|
446 | 447 | },
|
447 | 448 | setOptions:function(){
|
|
0 commit comments