从Chrome源码看浏览器的事件机制
在上一篇《从Chrome源码看浏览器如何构建DOM树》介绍了blink如何创建一棵DOM树,在这一篇将介绍事件机制。
上一篇还有一个地方未提及,那就是在构建完DOM之后,浏览器将会触发DOMContentLoaded事件,这个事件是在处理tokens的时候遇到EndOfFile标志符时触发的:
if (it->type() == HTMLToken::EndOfFile) { // The EOF is assumed to be the last token of this bunch. ASSERT(it + 1 == tokens->end()); // There should never be any chunks after the EOF. ASSERT(m_speculations.isEmpty()); prepareToStopParsing(); break; }
1
2
3
4
5
6
7
8
|
if (it->type() == HTMLToken::EndOfFile) {
// The EOF is assumed to be the last token of this bunch.
ASSERT(it + 1 == tokens->end());
// There should never be any chunks after the EOF.
ASSERT(m_speculations.isEmpty());
prepareToStopParsing();
break;
}
|
上面代码第1行,遇到结尾的token时,将会在第6行停止解析。这是最后一个待处理的token,一般是跟在