document.write()的一些坑
document.write()的⼀些坑
  这段时间在做⼀个⼴告系统,需要⽤js⾃动⽣成⼴告代码,其中遇到⼀些问题,在这记录下。
  第三⽅⼴告代码⼀般都是⽤ document.write()向页⾯写⼊,这次使⽤的时候遇到不少坑,经常会出现使⽤document.write()向页⾯写⼊的时候当前页⾯被清空。这正是document.write()的特殊之处,页⾯载⼊后浏览器输出流⾃动关闭,此后对当前页⾯进⾏document.write()操作将打开—个新的输出流,它将清除当前页⾯内容(包括源⽂档的任何变量或值)。
运动会作文  那么有哪些浏览器输出流关闭的标识呢?我们⾸先想到的是 load,在load后页⾯加载完成,浏览器输出流必然关闭。经测试$(document).ready()中的操作也是在浏览器输出流关闭之后执⾏。所以⽤于⽣成代码的document.write()不能写在
  由于第三⽅⼴告代码使⽤document.write()输出,所有的⼴告资源都在页⾯载⼊时加载,如果页⾯上第
三⽅⼴告⽐较多,必然会阻塞页⾯加载。有没有办法在使⽤document.write()的情况下不阻塞页⾯加载呢?其实是可以的,这⾥就需要我们改造原⽣的document.write()⽅法,在⼴告加载完毕再把原⽣⽅法改回来。这⾥就不具体展开来写,⾬夜带⼑博客有详细分析,这⾥贴⼀下带⼑改造document.write()的代码。
1/**
中国人寿养老保险
2 * 重写document.write实现⽆阻塞加载script
3 * @param { Dom Object } textarea元素
4*/
王者荣耀最皮的名字5var loadScript = function( elem ){
6var url = elem.value.match( /src="([\s\S]*?)"/i )[1],
7        parent = elem.parentNode,
8// 缓存原⽣的document.write
世界八大奇迹图片
9        docWrite = document.write,
10// 创建⼀个新script来加载
11        script = ateElement( 'script' ),
12        head = document.head ||
13            ElementsByTagName( 'head' )[0] ||
14            document.documentElement;
农村合作医疗保险15
16// 重写document.write
17    document.write = function( text ){
18        parent.innerHTML = text;
19    };
20
21    pe = 'text/javascript';
22    script.src = url;
23
24    r =
25    load =
26    adystatechange = function( e ){
27        e = e || window.event;
28if( !adyState ||
29        /loaded|complete/.adyState) ||
30        e === 'error'
31        ){
32
33// 恢复原⽣的document.write
34            document.write = docWrite;
35            veChild( script );
36
37// 卸载事件和断开DOM的引⽤
38// 尽量避免内存泄漏
39            head =
40            parent =
41            elem =
42            script =
43            r =
44            load =
45            adystatechange = null;制作水果冰淇淋
46
47        }
48    }
49
50// 加载script
51    head.insertBefore( script, head.firstChild );
52 };

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。