Проверка на существование файла в IE с помощью readyState 
		
		
		
		Привет. 
	Есть код, который динамически подключает другие срипты: 
function loadScripts(src,callback){
    var script = document.createElement("script");
    script.src = src;
    script.onload = script.onreadystatechange = function(){
    if ((!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
        script.onreadystatechange = script.onload = null;
        callback();
        }
        };
        var head = document.getElementsByTagName("head")[0];
        head.appendChild(script);
    }
Передадим скрипту, файл blahblah.js которого не существует: 
loadScripts('blahblah.js',function(){alert('works!')});
IE (тестировал на версиях: 8 и 6), с удовольствием повесил и выполнил callback на несуществующем файле! Проверил состояние readyState, вывел COMPLETE. В других, нормальных браузерах, все работает. Проблема только с IE. Какие есть варианты, заставить IE понимать, что файл не загрузился и callback вызывать не нужно.  | 
	
		
 Не сталкивался с такой проблемой, но первое, что приходит голову - это сделать callback в самом загружаемом скрипте:) 
	 | 
	
		
 я могу лишь такой вариант предложить: 
	
function loadScripts( src, callback ) {
	var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	req.onreadystatechange = function() {
		if ( this.readyState == 4 && this.status == 200 ) {
		    var script = document.createElement("script");
		    script.onload = script.onreadystatechange = function( e ){
			    if ( ( !this.readyState || this.readyState == "loaded" || this.readyState == "complete" ) ) {
			        this.onreadystatechange = this.onload = null;
			        callback();
			    }
		    };
		    script.src = src;
		    var head = document.getElementsByTagName( "head" )[ 0 ];
		    head.appendChild( script );
		}
	}
	req.open( "GET", src, true );
	req.send( null );
}
Другого для ие не придумать увы | 
	
		
 devote, 
	Проверять с помощью AJAX в принципе не плохая идея конечно. Вот если бы он был еще кроссдоменным! А так, проверять файлы только в пределах своего домена... IE в очередной раз показал, ху из ху!  | 
	
		
 devote, спасиб! 
	 | 
	
		
 гугл помагае 
	
var script= document.createElement('script');
   script.type= 'text/javascript';
   script.onreadystatechange= function () {
      if (this.readyState == 'complete') helper();
   }
   script.onload= helper;
   script.src= 'helper.js';
   document.getElementsByTagName('head')[0].appendChild(script);
ready states : Цитата: 
	
  | 
	
		
 melky, 
	Я это знаю. Проблема в том, что следующий код, выдаст в IE "Callback work!" пытаясь подключить несуществующий файл: nonexistentscript.js Состояние readyState: complete 
var helper = function(){
			alert('Callback work!');
	}
	var script= document.createElement('script');
	script.type= 'text/javascript';
	script.onreadystatechange= function () {
		if (this.readyState == 'complete') helper();
	 }
	 script.onload= helper;
	 script.src= 'nonexistentscript.js';
	 document.getElementsByTagName('head')[0].appendChild(script);
 | 
	
		
 melky, 
	Все эти стейты годятся для нормальных браузеров, для ИЕ это не выход)  | 
	
		
 единственный вариант, это если ты знаешь имя функции/метода который должен быть в загружаемом файле, тогда можно просто сделать проверку на его существование, типа: 
	
var script = document.createElement("script"); 
script.onload = script.onreadystatechange = function( e ){ 
  if ( ( !this.readyState || this.readyState == "loaded" || this.readyState == "complete" ) ) { 
    this.onreadystatechange = this.onload = null; 
    if ( window['имя того метода или функции'] ) {
      callback();
    }
  } 
}; 
script.src = src; 
var head = document.getElementsByTagName( "head" )[ 0 ]; 
head.appendChild( script );
 | 
	
		
 мне вообще чудно такое использование 
	 | 
| Часовой пояс GMT +3, время: 12:07. |