Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   DOMContentLoaded (https://javascript.ru/forum/events/29819-domcontentloaded.html)

cyber 14.07.2012 01:15

да, я до этого додумался уже, только почему то забыл написать(сел в WOT поиграть:))
вот что мне пришло на в голову
<!DOCTYPE HTML>
<html>
  <head>
    <script>
    
    
		var scr = document.createElement('script');
		   scr.type = 'text/javascript';
			  scr.id = 'DomLoadedScript';
		
			(function body_end(){
				
				try {
					
					document.body.appendChild(scr);
                      alert(document.body.innerHTML);
					} catch(e){
						
						setTimeout(body_end,0);
						}
				
				}());
    </script>
  
  </head>
  <body>


<script >


function handler(){
	alert('готов');
	
	}
</script>
<img src="http://worldoftanks.ru/dcont/fb/media/batchat_ru_june_clear/1920x1200.jpg">
<img id="img" src="http://wallpaper.goodfon.ru/image/302908-2880x1800.jpg"/>

</body>
</html>

переделал немного совю первую функцию, в боди можно добавить только после полной загрузки=)

devote 14.07.2012 01:19

Цитата:

Сообщение от cyber
в боди можно добавить только после полной загрузки=)

кто тебе это сказал?
<body>
<script>
    document.body.appendChild( document.createElement('b') );
    alert( document.body.innerHTML );
</script>
<div></div>
<script>
    alert( document.body.innerHTML );
</script>
</body>
в потоке можно делать что угодно

devote 14.07.2012 01:24

cyber, вот на твоем примере:
<!DOCTYPE HTML>
<html>
  <head>
    <script>
     
     
        var scr = document.createElement('script');
           scr.type = 'text/javascript';
              scr.id = 'DomLoadedScript';
         
            (function body_end(){
                 
                try {
                     
                    document.body.appendChild(scr);
                      alert(document.body.innerHTML);
                    } catch(e){
                         
                        setTimeout(body_end,0);
                        }
                 
                }());
    </script>
   
  </head>
  <body>
 
 
<script >
 
 
function handler(){
    alert('готов');
     
    }
</script>
<script>
    for( var i = 0; i < 10000; i++ ) {} // просто задержка, вместо задержки может быть тысяча тегов иль еще чего.
</script>
<img src="http://worldoftanks.ru/dcont/fb/media/batchat_ru_june_clear/1920x1200.jpg">
<img id="img" src="http://wallpaper.goodfon.ru/image/302908-2880x1800.jpg"/>
 
</body>
</html>
в результате видим алерт с содержимым:
<script>
 
 
function handler(){
    alert('готов');
     
    }
</script>
<script>
    for( var i = 0; i < 10000; i++ ) {} // просто задержка, вместо задержки может быть тысяча тегов иль еще чего.
</script><script type="text/javascript" id="DomLoadedScript"></script>

cyber 14.07.2012 01:27

у меня такой алерт
<script>
 
 
function handler(){
    alert('готов');
     
    }
</script>
<script>
    for( var i = 0; i < 10000; i++ ) {} // просто задержка, вместо задержки может быть тысяча тегов иль еще чего.
</script>
<img src="http://worldoftanks.ru/dcont/fb/media/batchat_ru_june_clear/1920x1200.jpg">
<img id="img" src="http://wallpaper.goodfon.ru/image/302908-2880x1800.jpg">
 


<script type="text/javascript" id="DomLoadedScript"></script>

cyber 14.07.2012 01:29

потом по тестю на большой странице.
а какие еще есть варианты для старых браузеров?

devote 14.07.2012 01:29

Цитата:

Сообщение от cyber
у меня такой алерт

а у меня другой.. и это уже говорит о том что раз на раз не приходится.. тут все зависит от интерпретатора скрипта, на сколько он отложит выполнение setTimeout

devote 14.07.2012 01:31

Цитата:

Сообщение от cyber
а какие еще есть варианты для старых браузеров?

никаких, только то что используют везде.

И еще вопрос а нафига тебе это? То что давно всеми используется нормально работает.

cyber 14.07.2012 03:22

Цитата:

Сообщение от devote (Сообщение 188657)
никаких, только то что используют везде.

И еще вопрос а нафига тебе это? То что давно всеми используется нормально работает.

дак я пытался взять скрипт из этой статьи http://javascript.ru/tutorial/events/ondomcontentloaded вроде понял как он пашет, да вот только в ие не работает,а проверить почему не могу нужно скачать xp для виртуалки что бы запустить и посмотреть ошибки...
вот код со страницей что бы запустить http://learn.javascript.ru/play/Xegrjb.

cyber 14.07.2012 03:41

вот работает везде(покрайнимере я не нашел где не работате )
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	
    <script >
var DOM = {}

function ready(){
	
if(!document.addEventListener){
	
  document.addEventListener('DOMContentLoaded',DOM.loaded,false);
	
	} else {
			var scr = document.createElement('script');
		   scr.type = 'text/javascript';
		   scr.text = 'DOM.loaded()';
			  scr.id = 'DomLoadedScript';
		
			(function body_end(){
				
				try {
					
					document.body.appendChild(scr);
					} catch(e){
						
						setTimeout(body_end,0);
						}
				
				}());
		
		} 
}

DOM.loaded = function (){
	
	handler();
	 img_src();
	}


ready();

	



</script>
  
  

</head>
<body>

<script >
function img_src(){
	
	alert(document.body.innerHTML);
	}

function handler(){
	alert('готов');
	
	}
</script>
<img src="http://worldoftanks.ru/dcont/fb/media/batchat_ru_june_clear/1920x1200.jpg">
<img id="img" src="http://wallpaper.goodfon.ru/image/302908-2880x1800.jpg"/>

</body>
</html>

devote 14.07.2012 03:47

Цитата:

Сообщение от cyber
дак я пытался взять скрипт из этой статьи

function DOMReady( callback ) {
  
    if ( document.readyState === "complete" ) {
        return setTimeout( callback, 1 );
    }
  
    var loaded = function( doScroll ) {
        if ( document.removeEventListener ) {
            document.removeEventListener( 'DOMContentLoaded', loaded, false );
            window.removeEventListener( 'load', loaded, false );
            loaded = null;
            callback();
        } else if ( document.detachEvent ) {
            if ( document.readyState === "complete" || doScroll === null ) {
                document.detachEvent( 'onreadystatechange', loaded );
                window.detachEvent( 'onload', loaded );
                loaded = null;
                callback();
            }
        }
    }
  
    if ( document.addEventListener ) {
        document.addEventListener( "DOMContentLoaded", loaded, false );
        window.addEventListener( "load", loaded, false );
    } else if ( document.attachEvent ) {
        document.attachEvent( "onreadystatechange", loaded );
        window.attachEvent( "onload", loaded );
  
        var toplevel = false;
        try {
            toplevel = window.frameElement == null;
        } catch( _e_ ) {}
  
        if ( document.documentElement.doScroll && toplevel ) {
            var check = function() {
                if ( !loaded ) return;
                try {
                    document.documentElement.doScroll( "left" );
                } catch( _e_ ) {
                    setTimeout( check, 0 );
                    return;
                }
                loaded( null );
            }
            check();
        }
    }
}


Часовой пояс GMT +3, время: 09:16.