您好我有代码替换document.write
,创建缓冲区而不是将缓冲区推送到文档中:
var lazyLoad = {
url: '',
block: '',
buffer: '',
init: function(url,block){
that = this
that.url = url;
that.block = block;
console.info(this.block)
console.log(this.url)
window.d = document
window.onload = function(){
that.work()
}
},
work: function(){
that = this
d.write = d.writeln = function(s){
that.buffer += s
}
d.open = d.close = function(){}
s = d.createElement('script');
s.setAttribute('type','text/javascript');
s.setAttribute('src',that.url);
d.getElementById(that.block).appendChild(s)
s.onload = function () {
window.setTimeout(function() {
console.warn(that.block + ' ' +that.buffer)
d.getElementById(that.block).innerHTML += that.buffer;
that.buffer = '';
}, 0);
}
}
}
如果我开始一次:
lazyLoad.init(
'http://test.com/test.js',
div1
)
但如果我再次使用其他参数调用它:
lazyLoad.init(
'http://test2.com/test.js',
div2
)
第一个init不会工作。 window.buffer
将为空。我的错误在哪里?
P.S。另一个问题:我试图用jQuery方法window.onload
替换$(window).load()
,但它会触发两次。我该如何解决?
答案 0 :(得分:2)
基本上,你只有一个缓冲区: window.buffer ,如果你两次调用 init(),window.buffer将被第二次调用操纵,而第一个电话可能无法完成。 我建议你为每个init()使用一个单独的缓冲区。这基本上可以避免这个问题。
关于第二个问题,
window.onload != $(window).load()
window.onload只会执行你最后分配给它的方法,而$(window).load()维护一个链,你可以 init()两次,然后有两个方法链条。