正如@zer00ne所说,一般规则是
windows.onload
只要页面上的所有内容都已存在,则称为“最后”。
如果动态创建元素,则
constructor
和
connectedCallback
函数将在之后调用
window.onload
.
另外,如果您延迟加载任何组件,则它们将在
窗口加载
即使你把他们的html放在
窗口加载
.
const loaded = msg => () => console.log(msg);
window.onload = loaded('window.onload');
class MyEl extends HTMLElement {
constructor() {
super();
loaded('MyEl.constructor')();
}
connectedCallback() {
loaded('MyEl.connectedCallback')();
}
}
customElements.define('my-el', MyEl);
setTimeout(()=>{
console.log('About to create element');
var newEl = document.createElement('my-el');
console.log('About to add element to body');
document.body.appendChild(newEl);
}, 1000);
setTimeout(()=>{
console.log('About to create new script tag');
newEl = document.createElement('script');
newEl.textContent = `
class MyEl2 extends HTMLElement {
constructor() {
super();
loaded('MyEl2.constructor')();
}
connectedCallback() {
loaded('MyEl2.connectedCallback')();
}
}
customElements.define('my-el-2', MyEl2);
`;
console.log('About to add script element to body');
document.body.appendChild(newEl);
}, 2000);
<my-el></my-el>
<my-el-2></my-el-2>