模拟DOMContentLoaded事件

window.load事件

文档中所有图片,脚本,链接以及子框完成加载后,才会触发window.onload事件。

浏览器兼容性:All

DOMContentLoaded事件

当页面中的文档树解析完成时,Document会触发DOMContentLoaded事件。此时,页面引用的样式表和图像文件,以及包含的框架页面可能还没有加载完成。

浏览器兼容性:Chrome 0.2+ , Firefox 1.0+, IE9+, Opera 9.0+, Safari 3.1+

模拟DOMContentLoaded

用户可等不及,文档全部加载完才可以与页面交互,这样的交互体验也是极差的,那对于不支持DOMContentLoaded的浏览器,我们只能来模拟了!

第一种方案:

 1 /*
 2 document.readyState 四种状态
 3
 4 uninitialized: 尚未开始加载
 5 loading: 正在加载
 6 interactive: 已加载了必需内容
 7 complete: 文档加载完成
 8 */
 9 function DomContentLoaded(){
10     if(document.readyState === ‘complete‘){
11         document.detachEvent("onreadystatechange", DOMContentLoaded);
12         //DOMContentLoaded触发,执行绑定的事件
13     }
14 };
15
16 document.attatchEvent("onreadystatechange", DOMContentLoaded);

第二种方案:

 1 /*
 2 当前页面如果是顶层窗口,可以每隔1ms模拟点击滚动条,直到不再抛出异常
 3 判断页面是否包含在firame中的方法:
 4 if(window.self === window.top){
 5     //当前页面是父页面
 6 }
 7 下面是jQuery的判断方法,又学会了一招(●‘?‘●)
 8 */
 9 var toplevel = false;
10 try{
11     //判断当前页面是否包含在iframe中
12     topleve = window.iframeElement == null;
13 }catch(e){}
14
15 function doScrollCheck(){
16     try{
17         document.documentElement.doScroll(‘left‘);
18     }catch(e){
19         setTimeout(doScrollCheck, 1);
20     }
21 }
22 if(document.documentElement.doScroll && toplevel){
23     doScrollCheck();
24 }

当页面内容较多或包含iframe时,模拟滚动条点击会比onreadystatechange先触发,因此jQuery 1.7.1中,结合了这两种方法来模拟DOMContentLoaded事件。

模拟DOMContentLoaded事件,布布扣,bubuko.com

时间: 2024-10-01 07:07:37

模拟DOMContentLoaded事件的相关文章

DOMContentLoaded事件解析

DOMContentLoaded是firefox下特有的Event, 当所有DOM解析完以后会触发这个事件.    与DOM中的onLoad事件与其相近.但onload要等到所有页面元素加载完成才会触发, 包括页面上的图片等等. 如果页面的图片很多的话, 从用户访问到onload触发可能需要较长的时间, 而在Ajax运用中, 常常需要在onload中加入许多初始化的动作, 如果由于网络问题引起     的图片加载过慢( 见: Ajax优化(2) -lazierLoad img && js)

VC++ 模拟"CLICK事件"关闭指定窗口

今天修改一个工具时遇到一个有意思的问题,打开某个窗口时弹出一些不相关的窗口,需要用户自己去手动点击后才能继续,保证不了自动处理,现在讲解决方式记录一下,如下 主要使用windows提供的FindWindow和FindWindowEx,参考代码如下 wchar_t szClassName[256]; //用于记录窗口标题 StringCchPrintf(szClassName, 256, L"Client%02d - VMCalc", m_Index + 1); HWND hwndDlg

JS/CSS/IMG加载顺序关系之DOMContentLoaded事件

DOMContentLoaded介绍 DOMContentLoaded事件的触发条件是: 将会在"所有的DOM全部加载完毕并且JS加载执行后触发". 但如果"js是通过动态加载进来的话,是不会影响到DOMContentLoaded的触发时间" 如下图所示,蓝色的线代表DOMContentLoaded开始触发,但前提是JS已经加载完毕并执行了. (仅仅是DOM 并不是onload事件整个页面全部加载完毕触发,DOMContentLoaded比onload要早触发 请区

如何模拟click事件,打开一个a标签链接?

在项目开发过程中,我们经常会碰到通过接口返回一个地址,同时在新的tab页面打开一个网址的情况,最直观的想法就是通过window.open(url)的方式,打开一个新的页面,但是大部分浏览器会遭遇拦截.因为大部分现代的浏览器(泛指 Chrome / Firefox / IE 10+ / Safari)都默认开启了阻止弹出窗口的策略,原因是 window.open 被广告商滥用,严重影响用户的使用.这个阻止弹出窗口的操作,并不是直接封杀 windw.open(),而是会根据用户的行为来判断这次 wi

onload 事件、DOMContentLoaded事件、DOM加载顺序

1.onload 事件 定义与语法 onload事件会在页面或者图像加载完成后立即发生. 法:onload="SomeJavaScriptCode“: 参数:SomeJavaScriptCode    描述:必需.规定该事件发生时执行的 JavaScript. 支持该事件的 HTML 标签:<body>, <frame>, <frameset>, <iframe>, <img>, <link>, <script>

模拟鼠标事件

使用以下三行代码就可以使用模拟鼠标事件了 var oCreateEvt = $D.createEvent('MouseEvents');//模拟鼠标对象 oCreateEvt.initMouseEvent('click',true,true,document.defaultView,0,0,0,0,0,false,false,false,false,0,null); $(id).dispatchEvent(oCreateEvt); 比较方便的应用可以利用模拟鼠标事件写一个键盘操作系统,具体实现

HTML5-常见的事件- DOMContentLoaded事件

一般我们监听文档是否加载完成是使用 window的load事件,该事件会在页面中的一切加载完毕时触发,但这个过程可能会因为要加载的外部资源过多而等待时间过长. DOMContentLoaded事件:则在形成完整DOM树之后就会触发,不理会图像.JavaScript文件.CSS文件或其他资源是否已经下载完成. DOMContentLoaded :好处就是可以在页面下载早起就可以添加事件处理程序,这样意味着用户能够尽早地与页面进行交互. 添加DOMContentLoaded事件如下: EventUt

WPF控件模拟双击事件

Action a = () => { i += 1; var timer = new System.Timers.Timer(800) { Interval = 600 }; timer.Elapsed += (sender, e) => { timer.Enabled = false; i = 0; }; timer.Enabled = true; if (i % 2 == 0) { i=0; timer.Enabled = false; //你的代码 } }; name_headChatW

DOMContentLoaded事件&lt;zz&gt;

今天查看百度空间源代码,发现多了个util.js文件,打开看看.里面里面定义了addDOMLoadEvent.这是干什么用的? 仔细查看代码,发现在Mozilla添加了DOMContentLoaded事件,这个在以前一直没有用过.                    if (document.addEventListener)                        document.addEventListener("DOMContentLoaded", init, fals