aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/window/domcontentloaded_event/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/api/window/domcontentloaded_event/index.html')
-rw-r--r--files/zh-cn/web/api/window/domcontentloaded_event/index.html128
1 files changed, 128 insertions, 0 deletions
diff --git a/files/zh-cn/web/api/window/domcontentloaded_event/index.html b/files/zh-cn/web/api/window/domcontentloaded_event/index.html
new file mode 100644
index 0000000000..67c6a44253
--- /dev/null
+++ b/files/zh-cn/web/api/window/domcontentloaded_event/index.html
@@ -0,0 +1,128 @@
+---
+title: DOMContentLoaded
+slug: Web/Events/DOMContentLoaded
+tags:
+ - DOMContentLoaded
+ - Window.open()
+ - load
+ - window.onload
+translation_of: Web/API/Window/DOMContentLoaded_event
+---
+<p>当初始的 <strong>HTML </strong>文档被完全加载和解析完成之后,<strong><code>DOMContentLoaded</code> </strong>事件被触发,而无需等待样式表、图像和子框架的完全加载。</p>
+
+<p>模拟的css文件:CSS.php</p>
+
+<pre class="notranslate">&lt;?php
+sleep(3);</pre>
+
+<p>测试代码:</p>
+
+<pre class="notranslate">&lt;link rel="stylesheet" href="css.php"&gt;
+&lt;script&gt;
+document.addEventListener('DOMContentLoaded',function(){
+ console.log('3 seconds passed');
+});
+&lt;/script&gt;</pre>
+
+<p>如果将link置于script之后,就会立即打印。</p>
+
+<p>{{Note("同步 JavaScript 会暂停 DOM 的解析。")}}</p>
+
+<p>{{Note("还有许多通用和独立的库提供跨浏览器方法来检测 DOM 是否已准备就绪")}}</p>
+
+<h2 id="加速中">加速中</h2>
+
+<p>如果您希望 DOM 在用户请求页面后尽可能快地解析,你可以做的一些事情是把你的 <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests">JavaScript 异步化</a> 以及 <a href="https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery">优化样式表的加载</a>, 由于被并行加载而减慢页面加载,从主 html 文档“窃取”流量。</p>
+
+<h2 id="常规信息">常规信息</h2>
+
+<dl>
+ <dt style="float: left; text-align: right; width: 120px;">规范</dt>
+ <dd style="margin: 0pt 0pt 0pt 120px;"><a class="external" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#the-end">HTML5</a></dd>
+ <dt style="float: left; text-align: right; width: 120px;">接口</dt>
+ <dd style="margin: 0pt 0pt 0pt 120px;">Event</dd>
+ <dt style="float: left; text-align: right; width: 120px;">是否冒泡</dt>
+ <dd style="margin: 0pt 0pt 0pt 120px;">是</dd>
+ <dt style="float: left; text-align: right; width: 120px;">能否取消</dt>
+ <dd style="margin: 0pt 0pt 0pt 120px;">能 (尽管一个简单的事件被指定为不可取消)</dd>
+ <dt style="float: left; text-align: right; width: 120px;">目标</dt>
+ <dd style="margin: 0pt 0pt 0pt 120px;">Document</dd>
+ <dt style="float: left; text-align: right; width: 120px;">默认行为</dt>
+ <dd style="margin: 0pt 0pt 0pt 120px;">无.</dd>
+</dl>
+
+<h2 id="属性">属性</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">属性</th>
+ <th scope="col">类型</th>
+ <th scope="col">描述</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>target</code> {{readonlyInline}}</td>
+ <td>{{domxref("EventTarget")}}</td>
+ <td>产生该事件的对象(DOM树中最顶级的那个对象).</td>
+ </tr>
+ <tr>
+ <td><code>type</code> {{readonlyInline}}</td>
+ <td>{{domxref("DOMString")}}</td>
+ <td>事件类型.</td>
+ </tr>
+ <tr>
+ <td><code>bubbles</code> {{readonlyInline}}</td>
+ <td>{{jsxref("Boolean")}}</td>
+ <td>该事件是否冒泡.</td>
+ </tr>
+ <tr>
+ <td><code>cancelable</code> {{readonlyInline}}</td>
+ <td>{{jsxref("Boolean")}}</td>
+ <td>该事件是否可取消默认行为.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="示例" style="margin-bottom: 20px; font-size: 28px; line-height: 28px;">示例</h2>
+
+<pre class="notranslate"><code>&lt;script&gt;
+ document.addEventListener("DOMContentLoaded", function(event) {
+ console.log("DOM fully loaded and parsed");
+ });
+&lt;/script&gt;</code></pre>
+
+<pre class="notranslate"><code>&lt;script&gt;
+ document.addEventListener("DOMContentLoaded", function(event) {
+ console.log("DOM fully loaded and parsed");
+ });
+
+ for(var i=0; i&lt;1000000000; i++){
+  // </code>这个同步脚本将延迟DOM的解析。
+  // 所以DOMContentLoaded事件稍后将启动。
+<code>  } </code><code>
+&lt;/script&gt;</code></pre>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p>{{Compat("api.Window.DOMContentLoaded_event")}}</p>
+
+<p><span>至少从Gecko 1.9.2,Chrome 6,以及Safari 4开始,就已经实现了</span><span>该事件的</span><span>冒泡行为.</span></p>
+
+<h3 id="兼容不支持该事件的浏览器">兼容不支持该事件的浏览器</h3>
+
+<p>在IE8中,可以使用<code>readystatechange</code>事件来检测DOM文档是否加载完毕.在更早的IE版本中,可以通过每隔一段时间执行一次<code>document.documentElement.doScroll("left")来检测这一状态,</code>因为这条代码在DOM加载完毕之前执行时会抛出错误(throw an error)。</p>
+
+<p>诸如jQuery这样的通用JS库,会提供跨浏览器的方法来检测DOM是否加载完成。也有其他专门实现该功能的脚本:<a href="https://github.com/dperini/ContentLoaded/blob/master/src/contentloaded.js" title="https://github.com/dperini/ContentLoaded/blob/master/src/contentloaded.js">contentloaded.js</a> (只能添一个时间监听函数)以及<a href="https://github.com/addyosmani/jquery.parts/blob/master/jquery.documentReady.js" title="https://github.com/addyosmani/jquery.parts/blob/master/jquery.documentReady.js">jquery.documentReady.js</a> (并不依赖jQuery,虽然名字中有jquery).</p>
+
+<h2 id="相关事件">相关事件</h2>
+
+<ul>
+ <li>{{event("DOMContentLoaded")}}</li>
+ <li>{{event("readystatechange")}}</li>
+ <li>{{event("load")}}</li>
+ <li>{{event("beforeunload")}}</li>
+ <li>{{event("unload")}}</li>
+ <li><a href="https://codepen.io/gildata/pen/VrzXOb">DOMContentLoaded demo</a></li>
+</ul>