Changeset 18499

Show
Ignore:
Timestamp:
08/31/08 00:34:43 (4 months ago)
Author:
37to
Message:

ローディング関数汎用化、readyStateのloaded捕捉、コンストラクタでオプション受け取りの追加、オプションで任意の要素の中にscript要素を追加、テストコード一部修正

Location:
lang/javascript/jsloader/trunk
Files:
1 removed
2 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/jsloader/trunk/jsloader.js

    r18148 r18499  
    1 var JSLoader = function(callback){ 
     1var JSLoader = function(options){ 
     2    var options  = options || {}; 
    23    this.pointer = 0; 
    3     this.callback = callback || function(){}; 
     4    this.finish  = options.finish || function(){}; 
     5    this.append  = options.append || null; 
    46    this.queue = { 
    57        length : 0, 
     
    1719    next : function(){ 
    1820        var self = this; 
    19         var loader = new JSLoader(function(){ 
    20             self._next(); 
     21        var loader = new JSLoader({ 
     22            append : self.append, 
     23            finish : function(){ 
     24                self._next(); 
     25            } 
    2126        }); 
    2227        var args = []; 
     
    4146        switch(typeof arg){ 
    4247          case 'string' : 
    43             this.queue.push(function(){self.load(arg)}); 
     48            this.queue.push(function(){self.load(arg,{ 
     49                append : self.append, 
     50                onload : function(){ 
     51                    self.report(); 
     52                }}); 
     53            }); 
    4454            break; 
    4555          case 'function' : 
     
    5262        this.queue.length--; 
    5363        if(this.queue.length == 0){ 
    54             this.callback(); 
     64            this.finish(); 
    5565        } 
    5666    }, 
     
    6676    }, 
    6777 
    68     load : function(src){ 
    69         var self = this; 
    70         var script = document.createElement('script'); 
    71         script.type = 'text/javascript'; 
    72         script.src = src; 
    73         script.id = 'test'; 
     78    load : function(src, options){ 
     79        var options   = options || {}; 
     80        var element   = options.append || document.body || document.documentElement; 
     81        var script    = document.createElement('script'); 
     82        script.src    = src; 
     83        script.type   = options.type   || 'text/javascript'; 
     84        script.onload = options.onload || function(){}; 
     85        if(options.charset) 
     86          script.charset = options.charset; 
    7487        if( document.all ){ 
    75             script.onreadystatechange =  function(){if(script.readyState == 'complete') self.report(); }; 
    76         }else{ 
    77             script.onload = function(){self.report()}; 
     88            script.onreadystatechange = function(){ 
     89                switch(script.readyState){ 
     90                  case 'complete': 
     91                  case 'loaded' : 
     92                    script.onload(); 
     93                    break; 
     94                } 
     95            }; 
    7896        } 
    79         (document.body || document.documentElement).appendChild(script); 
     97        element.appendChild(script); 
    8098    } 
    8199}; 
  • lang/javascript/jsloader/trunk/test.html

    r18148 r18499  
    77        <title>JSLoader test</title> 
    88        <script type="text/javascript" src="jsloader.js"></script> 
    9         <script type="text/javascript" src="test/test.js"></script> 
    109</head> 
    1110<body> 
     11<button onclick="test();">run</button> 
    1212<div id="code"></div> 
    13 <button onclick="test();">run</button> 
     13<script type="text/javascript"> 
     14function test(){ 
     15    var ele = document.getElementById('code'); 
     16    new JSLoader({ 
     17        append : ele, 
     18        finish : function(){ 
     19            status('end script'); 
     20        } 
     21    }) 
     22    .next('http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load1.js') 
     23    .next(function(){ 
     24        status('loaded load1'); 
     25    }) 
     26    .next('http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load2.js', 
     27          function(){ 
     28              status('loading load2 and load3'); 
     29          }, 
     30          'http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load3.js') 
     31    .next(function(){ 
     32        status('loaded load2 and load3'); 
     33    }) 
     34    .next('http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load4.js', 
     35          'http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load5.js', 
     36          'http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load6.js' ) 
     37    .next(function(){ 
     38        status('loaded load4 and load5 and load6'); 
     39    }) 
     40    .next('http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load7.js', 
     41          'http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load8.js') 
     42    .next(function(){ 
     43        status('loaded load7 and load8'); 
     44    }) 
     45    .next('http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load9.js', 
     46          'http://svn.coderepos.org/share/lang/javascript/jsloader/trunk/test/script/load10.js') 
     47    .next(function(){ 
     48        status('loaded load9 and load10'); 
     49    }) 
     50    .start(); 
     51} 
     52 
     53function status(mes){ 
     54    var ele = document.getElementById('code'); 
     55    ele.innerHTML = ele.innerHTML+'<p>'+mes+"<p>"; 
     56    var loadStatus = ''; 
     57    for(var i=1,l=10; i<=10; i++){ 
     58        var val = 'load'+i; 
     59        var status = ''; 
     60        if(window[val]){ 
     61            status = 'loaded'; 
     62        }else{ 
     63            status = 'undefined'; 
     64        } 
     65        loadStatus += '<li>'+val+':'+status+'</li>' 
     66    } 
     67    ele.innerHTML = ele.innerHTML+'<ul>'+loadStatus+'</ul>'; 
     68} 
     69</script> 
    1470 
    1571</body>