75 lines
1.7 KiB
JavaScript
75 lines
1.7 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Bug 1738220 - Shim Conversant FastClick
|
|
*
|
|
* Sites assuming FastClick will load can break if it is blocked.
|
|
* This shim mitigates that breakage.
|
|
*/
|
|
|
|
// FastClick bundles nodeJS packages/core-js/internals/dom-iterables.js
|
|
// which is known to be needed by at least one site.
|
|
if (!HTMLCollection.prototype.forEach) {
|
|
const DOMIterables = [
|
|
"CSSRuleList",
|
|
"CSSStyleDeclaration",
|
|
"CSSValueList",
|
|
"ClientRectList",
|
|
"DOMRectList",
|
|
"DOMStringList",
|
|
"DOMTokenList",
|
|
"DataTransferItemList",
|
|
"FileList",
|
|
"HTMLAllCollection",
|
|
"HTMLCollection",
|
|
"HTMLFormElement",
|
|
"HTMLSelectElement",
|
|
"MediaList",
|
|
"MimeTypeArray",
|
|
"NamedNodeMap",
|
|
"NodeList",
|
|
"PaintRequestList",
|
|
"Plugin",
|
|
"PluginArray",
|
|
"SVGLengthList",
|
|
"SVGNumberList",
|
|
"SVGPathSegList",
|
|
"SVGPointList",
|
|
"SVGStringList",
|
|
"SVGTransformList",
|
|
"SourceBufferList",
|
|
"StyleSheetList",
|
|
"TextTrackCueList",
|
|
"TextTrackList",
|
|
"TouchList",
|
|
];
|
|
|
|
const forEach = Array.prototype.forEach;
|
|
|
|
const handlePrototype = proto => {
|
|
if (!proto || proto.forEach === forEach) {
|
|
return;
|
|
}
|
|
try {
|
|
Object.defineProperty(proto, "forEach", {
|
|
enumerable: false,
|
|
get: () => forEach,
|
|
});
|
|
} catch (_) {
|
|
proto.forEach = forEach;
|
|
}
|
|
};
|
|
|
|
for (const name of DOMIterables) {
|
|
handlePrototype(window[name]?.prototype);
|
|
}
|
|
}
|
|
|
|
if (!window.conversant?.launch) {
|
|
const c = (window.conversant = window.conversant || {});
|
|
c.launch = () => {};
|
|
}
|