|
|
@@ -83,7 +83,7 @@ this.hooksFrame = this.hooksFrame || (() => {
|
|
|
screen.__defineGetter__("height", () => scrollHeight);
|
|
|
screen.__defineGetter__("width", () => scrollWidth);
|
|
|
try {
|
|
|
- document.__defineGetter__("cookie", () => { throw new Error("document.cookie temporary blocked by SingleFile"); });
|
|
|
+ document.__defineGetter__("cookie", () => { throw new Error("document.cookie temporary blocked by SingleFile"); });
|
|
|
} catch (error) {
|
|
|
// ignored
|
|
|
}
|
|
|
@@ -215,16 +215,28 @@ this.hooksFrame = this.hooksFrame || (() => {
|
|
|
let warningRequestAnimationFrameDisplayed;
|
|
|
const pendingRequestAnimationFrameCalls = new Map();
|
|
|
let lastTimestamp = 0;
|
|
|
+ let errorDetected;
|
|
|
window.requestAnimationFrame = function (callback) {
|
|
|
if (!warningRequestAnimationFrameDisplayed) {
|
|
|
console.warn("SingleFile is hooking the requestAnimationFrame and cancelAnimationFrame functions to load deferred images."); // eslint-disable-line no-console
|
|
|
warningRequestAnimationFrameDisplayed = true;
|
|
|
}
|
|
|
let requestId;
|
|
|
- if (loadDeferredImages) {
|
|
|
- requestId = 0;
|
|
|
- callback(lastTimestamp);
|
|
|
+ if (loadDeferredImages && !errorDetected) {
|
|
|
+ try {
|
|
|
+ requestId = 0;
|
|
|
+ callback(lastTimestamp);
|
|
|
+ } catch (error) {
|
|
|
+ errorDetected = true;
|
|
|
+ requestId = requestAnimationFrame(timestamp => {
|
|
|
+ lastTimestamp = timestamp;
|
|
|
+ callback(timestamp);
|
|
|
+ });
|
|
|
+ }
|
|
|
} else {
|
|
|
+ if (!loadDeferredImages) {
|
|
|
+ errorDetected = false;
|
|
|
+ }
|
|
|
requestId = requestAnimationFrame(timestamp => {
|
|
|
pendingRequestAnimationFrameCalls.delete(requestId);
|
|
|
lastTimestamp = timestamp;
|