diff --git a/doc/README_CN.md b/doc/README_CN.md index 2fb1638..c2ac257 100644 --- a/doc/README_CN.md +++ b/doc/README_CN.md @@ -49,7 +49,7 @@ Eruda 是一个专为手机网页前端设计的调试面板,类似 DevTools 通过CDN使用: ```html - + ``` diff --git a/doc/UTIL_API.md b/doc/UTIL_API.md index a49515a..36d2385 100644 --- a/doc/UTIL_API.md +++ b/doc/UTIL_API.md @@ -1743,6 +1743,21 @@ query.stringify({foo: 'bar', eruda: 'true'}); // -> 'foo=bar&eruda=true' query.parse('name=eruda&name=eustia'); // -> {name: ['eruda', 'eustia']} ``` +## ready + +Invoke callback when dom is ready, similar to jQuery ready. + +|Name|Type |Desc | +|----|--------|-----------------| +|fn |function|Callback function| + +```javascript +ready(function () +{ + // It's safe to manipulate dom here. +}); +``` + ## repeat Repeat string n-times. diff --git a/src/Network/Network.js b/src/Network/Network.js index 8ac3bfe..88da34e 100644 --- a/src/Network/Network.js +++ b/src/Network/Network.js @@ -336,7 +336,7 @@ export default class Network extends Tool if (!cfg.get('disablePerformance')) { - this._getPerformanceTimingData(); + util.ready(() => this._getPerformanceTimingData()); renderData.data = this._performanceTimingData; renderData.timing = this._performanceTiming; } diff --git a/src/lib/util.js b/src/lib/util.js index a1f18f0..a39bbc7 100644 --- a/src/lib/util.js +++ b/src/lib/util.js @@ -5401,6 +5401,55 @@ module.exports = (function () return exports; })(); + /* ------------------------------ ready ------------------------------ */ + + _.ready = (function () + { + /* Invoke callback when dom is ready, similar to jQuery ready. + * + * |Name|Type |Desc | + * |----|--------|-----------------| + * |fn |function|Callback function| + * + * ```javascript + * ready(function () + * { + * // It's safe to manipulate dom here. + * }); + * ``` + */ + + /* module + * env: browser + * test: browser + */ + + var fns = [], + listener, + doc = document, + hack = doc.documentElement.doScroll, + domContentLoaded = 'DOMContentLoaded', + loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState); + + if (!loaded) + { + doc.addEventListener(domContentLoaded, listener = function () + { + doc.removeEventListener(domContentLoaded, listener); + loaded = 1; + /* eslint-disable no-cond-assign */ + while (listener = fns.shift()) listener(); + }); + } + + function exports(fn) + { + loaded ? setTimeout(fn, 0) : fns.push(fn) + } + + return exports; + })(); + /* ------------------------------ rtrim ------------------------------ */ var rtrim = _.rtrim = (function ()