2011-11-10 20 views
1

こんにちは、私はdocument.writeを置き換えコードを持っているが、バッファと比べ文書にバッファプッシュします:初期化オブジェクト

var lazyLoad = (function() { 

    var counter = 0 
    var buffer = new Array() 
    function work(options){ 
     window.d = document  
     var tmp_buffer 
     d.write = d.writeln = function(s){ tmp_buffer += s} 

     d.open = d.close = function(){} 
     s = d.createElement('script') 
     s.setAttribute('type','text/javascript') 
     s.setAttribute('src',options.url) 
     d.getElementById(options.block).appendChild(s) 

     s.onload = function() { 
      buffer[counter] = tmp_buffer 
      console.log(buffer[1]) 
      window.setTimeout(function() { 
       d.getElementById(options.block).innerHTML += buffer[counter]    
      }, 0) 
      counter++ 
     } 
    } 

    return { 

      init: function (options) { 

       var CONFIG = { 
       url: '', 
       block: '' 
      } 

       $.extend(CONFIG, options) 

       random = $('#'+CONFIG.block).attr('rel') 
       id = $('#'+CONFIG.block).attr('id').replace(random,'') 
       id = id.replace('DIV','') 
       size = id.split('X') 
       ele_width = size[0] || CONFIG.width 
       ele_height = size[1] || CONFIG.height 

       $('#'+CONFIG.block).css({ 
             'width':ele_width+'px', 
             'height':ele_height+'px' 
            }) 


       $(window).load(function(){ 
        if(options.adfox) { 
         random = $('#'+CONFIG.block).attr('id') 
         AdFox_getCodeScript(1, random, CONFIG.url) 
        }else{ 
         work(options) 
        } 
       }) 
      } 

    } 


})(); 

私は一度それを初期化した場合:

lazyLoad.init({ 
     'http://test.com/test.js',    
     div1 
}) 

しかし、私ならば他のパラメータでもう一度呼び出す:

lazyLoad.init({ 
     'http://test2.com/test.js',    
     div2 
}) 

最初のinitは動作しません。 bufferは空になります。私のミスはどこですか?

+1

こんにちは。 init()関数のパラメータとしてオブジェクトリテラル '{url: 'http://test.com/test.js'、block:div1}'を渡すべきではありませんか?何かエラーが出ますか?いつあなたはinit()を呼び出しますか? –

+0

不正なコピー貼り付け:)固定 – rsboarder

答えて

0

私は

$(window).load(function(){ 

は、イベントハンドラを上書きすると思います。次のように試してみてください:

$(function(){ 

}); 

イベントハンドラの配列を追加すると思います。私は間違っている可能性があります。それがどのように判明したか教えてください。

また、ローカルスコープで "s"を定義しているようには見えません。変数を定義するときに変数の前に "var"を置かないと、変数はグローバルスコープで作成されます。

+0

残念ながら、それは助けにはなりません。 – rsboarder

+0

あなたは全体のコンテキストを見ることができるようにURLを公開することができますか? – Homer6

+0

私は問題がtmp_bufferと思う。 2番目のクロージャー(s.onload関数内)で使用すると、最初のクロージャーを上書きします。あなたはtmp_buffer変数の代わりにtmp_buffer.divid.valueを入れてみることができますか?つまり、 "onload"コールバックごとに1つのシリアライズ変数を作成します。したがって、s.onloadコールバックが最終的に呼び出されると、適切なtmp_bufferデータを参照します。 – Homer6

関連する問題