Highlights Mozilla published its standards position on the Web Environment Integrity API proposal draft put forward by the Google Chrome team. A new version of Firefox View is in ...
I use qutebrowser for this reason. Keyboard first controls. All the workaround extensions for Firefox have limitations on about, config, and addon pages. I also had trouble with losing focus to Google docs and when a page is loading. Until Firefox offers full native control options, this was too brittle for me from a keyboard accessibility perspective.
I would love to use Firefox more though once this happens!
You can customize browser-internal shortcuts with a script in your profile dir.
For example this is my script
‹user profile›/chrome/removeshortcuts.uc.js
var ids = `
viewBookmarksSidebarKb
key_quitApplication
openFileKb
key_savePage
printKb
goBackKb2
goForwardKb2
addBookmarkAsKb
bookmarkAllTabsKb
manBookmarkKb
viewBookmarksToolbarKb
`.replace(/\s+/g,' ').trim().split(' ');
ids.forEach( id=>{
var key = document.getElementById(id);
if (key) key.remove();
});
var originalKey = document.getElementById("key_screenshot");
if (originalKey) {
// Clone the original key
var newKey = originalKey.cloneNode(true);
// Set the new id and shortcut for the new key
newKey.setAttribute("id", newKey.id+"_redjard_alt");
if (newKey.hasAttribute('data-l10n-id'))
newKey.setAttribute("data-l10n-id", newKey.getAttribute('data-l10n-id')+"_redjard_alt");
newKey.setAttribute("key", "S");
newKey.setAttribute("modifiers", "accel");
// Add the new key to the parent of the original key
originalKey.parentNode.appendChild(newKey);
}
The script removes the shortcuts listed in the beginning and adds an alternate shortcut for screenshots to ctrl+s.
You can see all internashortcuts by opening a browser console and querying the shortcut elements (using regular javascript)
To complete this, probably with ff117 I had to fix the way I load my userchrome files, reminding me I should probably put them here too:
/usr/lib64/firefox/firefox.cfg
// firefox.cfg file needs to start with a comment line
// it is included by having the following two lines in defaults/pref/autoconfig.js:
// pref("general.config.sandbox_enabled", false);
// pref("general.config.filename", "firefox.cfg");
// pref("general.config.obscure_value", 0);
var Services = globalThis.Services;
Services.obs.addObserver((aSubject, _aTopic, _aData)=>{
var chromeWindow = aSubject;
chromeWindow.setTimeout(()=>{
try {
if (chromeWindow.userChromeJsMod) return;
chromeWindow.userChromeJsMod = true;
var chromeFiles = chromeWindow.FileUtils.getDir("UChrm", []).directoryEntries;
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
while (chromeFiles.hasMoreElements()) {
var file = chromeFiles.getNext().QueryInterface(Components.interfaces.nsIFile);
var fileURI = Services.io.newFileURI(file);
if (!file.isFile()) continue;
if (/(^userChrome|\.uc)\.js$/i.test(file.leafName)) {
// load userChrome.js and *.uc.js (case insensitive) as js file
Services.scriptloader.loadSubScriptWithOptions(fileURI.spec, {
target: chromeWindow,
charset: "UTF-8",
ignoreCache: true,
});
} else if (/\.as\.css$/i.test(file.leafName)) {
// load *.as.css (case insensitive) as css file (in browser scope)
if (!sss.sheetRegistered(fileURI, sss.AGENT_SHEET)) {
sss.loadAndRegisterSheet(fileURI, sss.AGENT_SHEET);
}
} else if (/^(?!(userChrome|userContent)\.css$).+\.css$/i.test(file.leafName)) {
if (!sss.sheetRegistered(fileURI, sss.USER_SHEET)) {
sss.loadAndRegisterSheet(fileURI, sss.USER_SHEET);
}
}
}
} catch (e) {
Components.utils.reportError(e); // [check] Show Content Messages
}
}, 10); // end of timeout
}, "browser-delayed-startup-finished", false);
And yes, it really makes a difference. And, there are even extra extensions for TST: I use a color tabs extenaion for it as welm as an extension that lets me export a tab tree as markdown for use in my notes or to batch "bookmark" them before closing them.