Release v2.4.0 — Erzwungene Einstellungen: about:config-Prefs bei jedem Start setzen
Neuer forcedPrefs-WebExtension-Experiment (Services.prefs) setzt beim Start globale Prefs (Startseite aus, Kartenansicht, nicht gruppiert, absteigend, 3-Spalten-Layout, nicht auto-gelesen) sowie pro Identität die Signatur-/ Antwort-Einstellungen. Pro Setting im Options-Dialog (⚙-Tab) abschaltbar. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015PZHd9vRsBiH8cKYdQo1Yv
This commit is contained in:
61
experiments/prefs/api.js
Normal file
61
experiments/prefs/api.js
Normal file
@@ -0,0 +1,61 @@
|
||||
"use strict";
|
||||
|
||||
// Privilegierter Parent-Scope: schreibt/liest about:config-Prefs über Services.prefs.
|
||||
// Der Modulpfad von ExtensionCommon wechselte mitten im TB-Lebenszyklus:
|
||||
// TB 115+ -> ExtensionCommon.sys.mjs (ESM)
|
||||
// TB 109-114 -> ExtensionCommon.jsm (JSM)
|
||||
// Deshalb defensiv laden, damit dieselbe api.js über die Flotte funktioniert.
|
||||
var { ExtensionCommon } = (() => {
|
||||
try {
|
||||
return ChromeUtils.importESModule(
|
||||
"resource://gre/modules/ExtensionCommon.sys.mjs"
|
||||
);
|
||||
} catch (e) {
|
||||
return ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm");
|
||||
}
|
||||
})();
|
||||
|
||||
// `Services` ist im privilegierten ExtensionAPI-Sandbox in TB 109+ global
|
||||
// (stellt Services.prefs = nsIPrefBranch bereit); kein Import nötig.
|
||||
|
||||
this.forcedPrefs = class extends ExtensionCommon.ExtensionAPI {
|
||||
getAPI(context) {
|
||||
return {
|
||||
forcedPrefs: {
|
||||
async setPref(name, type, value) {
|
||||
switch (type) {
|
||||
case "bool":
|
||||
Services.prefs.setBoolPref(name, !!value);
|
||||
break;
|
||||
case "int":
|
||||
Services.prefs.setIntPref(name, value | 0);
|
||||
break;
|
||||
case "string":
|
||||
// setStringPref ist unicode-sicher (im Gegensatz zu setCharPref).
|
||||
Services.prefs.setStringPref(name, String(value));
|
||||
break;
|
||||
default:
|
||||
throw new Error("forcedPrefs.setPref: unknown type " + type);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
async getPref(name, type) {
|
||||
if (Services.prefs.getPrefType(name) === Services.prefs.PREF_INVALID) {
|
||||
return null;
|
||||
}
|
||||
switch (type) {
|
||||
case "bool":
|
||||
return Services.prefs.getBoolPref(name, false);
|
||||
case "int":
|
||||
return Services.prefs.getIntPref(name, 0);
|
||||
case "string":
|
||||
return Services.prefs.getStringPref(name, "");
|
||||
default:
|
||||
throw new Error("forcedPrefs.getPref: unknown type " + type);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
29
experiments/prefs/schema.json
Normal file
29
experiments/prefs/schema.json
Normal file
@@ -0,0 +1,29 @@
|
||||
[
|
||||
{
|
||||
"namespace": "forcedPrefs",
|
||||
"description": "Read/write about:config preferences from a privileged parent context.",
|
||||
"functions": [
|
||||
{
|
||||
"name": "setPref",
|
||||
"type": "function",
|
||||
"async": true,
|
||||
"description": "Force an about:config pref to a fixed value. type is one of 'bool','int','string'.",
|
||||
"parameters": [
|
||||
{ "name": "name", "type": "string" },
|
||||
{ "name": "type", "type": "string", "enum": ["bool", "int", "string"] },
|
||||
{ "name": "value", "type": "any" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "getPref",
|
||||
"type": "function",
|
||||
"async": true,
|
||||
"description": "Read an about:config pref; returns null if unset.",
|
||||
"parameters": [
|
||||
{ "name": "name", "type": "string" },
|
||||
{ "name": "type", "type": "string", "enum": ["bool", "int", "string"] }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user