Ask me anything!
Have a question you always wanted to ask Moonchild but never did? Now's your chance!
From 2026-03-08 to 2026-03-15 I'll be open to
any question by the community, after which I'll provide answers.
Go here to participate:
https://forum.palemoon.org/viewtopic.php?f=66&t=33222
For support with specific websites
Moderator: trava90
Forum rules
Please
always mention the name/domain of the website in question in your topic title.
Please one website per topic thread (to help keep things organized). While behavior on different sites might at first glance seem similar, they are not necessarily caused by the same.
Please try to include any relevant output from the Toolkit Error Console or the Developer Tools Web Console using the following procedure:
- Clear any current output
- Navigate or refresh the page in question
- Copy and paste Errors or seemingly relevant Warnings into a single [ code ] block.
-
Lucio Chiappetti
- Keeps coming back

- Posts: 897
- Joined: 2014-09-01, 15:11
- Location: Milan Italy
Post
by Lucio Chiappetti » 2026-02-07, 12:06
Again problems with
https://forum.italia.it/
After I applied the solutins supplied by adoxa in the now locked thread
https://forum.palemoon.org/viewtopic.ph ... 52#p235687
it has been working until last week.
Now in my default condition (uBO) comes out blank. If I disable uBO one gets the "Unfortunately, your browser is unsupported. Please switch to a supported browser to view rich content, log in and reply." top banner.
Code: Select all
Timestamp: 07/02/26 13:07:27
Error: uncaught exception: Unsupported browser detected
Timestamp: 07/02/26 13:07:27
Error: ReferenceError: $ is not defined
Source File: https://forum.italia.it/theme-javascripts/512e7a1a244c9d9b03423c63b6ed5cf262ea023b.js?__ws=forum.italia.it
Line: 173\Timestamp: 07/02/26 13:07:27
Error: ReferenceError: $ is not defined
Source File: https://forum.italia.it/theme-javascripts/745566d9b902edc0c5a270d268ac8442136117fb.js?__ws=forum.italia.it
Line: 4
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
-
adoxa
- Astronaut

- Posts: 601
- Joined: 2019-03-16, 13:26
- Location: Qld, Aus.
Post
by adoxa » 2026-02-08, 01:51
It wants
FinalizationRegistry; here's the userscript used by Basilisk (albeit using
window.FinalizationRegistry rather than just
FinalizationRegistry).
Code: Select all
// 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/.
// ==UserScript==
// @name FinalizationRegistry Polyfill (best-effort)
// @namespace internal-userscripts
// @description Provides a minimal FinalizationRegistry stub for environments without native support. This cannot observe garbage collection; callbacks run asynchronously after register (best-effort stub).
// @match *://*/*
// @grant none
// @run-at document-start
// ==/UserScript==
(function () {
"use strict";
function noop() {}
// This implementation cannot receive GC notifications. As a best-effort
// approximation it runs the cleanup callback asynchronously for every
// registration unless the entry is unregistered first.
function PolyfillFinalizationRegistry(cleanupCallback) {
if (typeof cleanupCallback !== "function") {
throw new TypeError("cleanup callback must be a function");
}
this._cleanupCallback = cleanupCallback;
this._entries = new Map();
this._pending = false;
}
PolyfillFinalizationRegistry.prototype.register = function (target, heldValue, unregisterToken) {
if (target == null || (typeof target !== "object" && typeof target !== "function")) {
throw new TypeError("register target must be an object");
}
// Store by token if provided; fall back to target identity.
const key = unregisterToken || target;
this._entries.set(key, heldValue);
// Best-effort: fire cleanup almost immediately to mimic GC completion.
if (!this._pending) {
this._pending = true;
setTimeout(() => {
this._pending = false;
this._runCleanup(this._cleanupCallback);
}, 0);
}
};
PolyfillFinalizationRegistry.prototype.unregister = function (unregisterToken) {
if (unregisterToken == null) {
return false;
}
return this._entries.delete(unregisterToken);
};
PolyfillFinalizationRegistry.prototype._runCleanup = function (cb) {
cb = cb || noop;
const entries = Array.from(this._entries.values());
this._entries.clear();
for (const held of entries) {
try {
cb(held);
} catch (e) {
// Swallow to continue other callbacks.
}
}
};
PolyfillFinalizationRegistry.prototype.cleanupSome = function (callback) {
this._runCleanup(callback || this._cleanupCallback);
};
// Expose the stub globally (override to guarantee presence).
// eslint-disable-next-line no-global-assign
window.FinalizationRegistry = PolyfillFinalizationRegistry;
try {
// Marker for debugging/verification.
window.__internalUserscriptsFinalizationRegistryPolyfill = true;
} catch (e) {}
})();
-
Lucio Chiappetti
- Keeps coming back

- Posts: 897
- Joined: 2014-09-01, 15:11
- Location: Milan Italy
Post
by Lucio Chiappetti » 2026-02-08, 11:30
I hoped you would find a solution, but based on modify-http-response (you are the wizard).
Where should I put such userscript ?
(if it requires another addon I guess I'll use chrome ... I visit such site once per week)
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
-
adoxa
- Astronaut

- Posts: 601
- Joined: 2019-03-16, 13:26
- Location: Qld, Aus.
Post
by adoxa » 2026-02-08, 14:11
I think it's technically possible to use it without another extension, but I'm not sure of the details; I've used Greasemonkey, or there's Guerilla Scripting. I could probably come up with a filter if you really want (looks like I've done it twice before...).