diff --git a/src/js/kr-core.js b/src/js/kr-core.js index 17ce6ab8..299d9bea 100644 --- a/src/js/kr-core.js +++ b/src/js/kr-core.js @@ -1,8 +1,7 @@ -/** - * 一些暴露给 DOM 交互使用的全局函数 - */ import scrollIntoView from "scroll-into-view-if-needed"; +import "./kr-polyfill"; + /** * 核心的配置体,包一层防止全局变量命名导致的冲突 */ diff --git a/src/js/kr-polyfill.js b/src/js/kr-polyfill.js new file mode 100644 index 00000000..c0129d94 --- /dev/null +++ b/src/js/kr-polyfill.js @@ -0,0 +1,24 @@ +/** + * 2024 年快结束了, iOS 18 也升级了, Safari (Webkit) 依然不支持 requestIdleCallback() 。 + * + * 需要注意的是,这不是一个完整意义上的实现,只是一个类似功能的简陋包装,以使运行在和这个函数有仇的浏览器内核上的网页的评论区能正常加载。 + */ +// https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback +window.requestIdleCallback = + window.requestIdleCallback || + function (handler) { + let startTime = Date.now(); + return setTimeout(function () { + handler({ + didTimeout: false, + timeRemaining: function () { + return Math.max(0, 50.0 - (Date.now() - startTime)); + }, + }); + }, 1); + }; +window.cancelIdleCallback = + window.cancelIdleCallback || + function (id) { + clearTimeout(id); + };