Where did you install Firefox from? Help Mozilla uncover 3rd party websites that offer problematic Firefox installation by taking part in our campaign. There will be swag, and you'll be featured in our blog if you manage to report at least 10 valid reports!

搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

Learn More

[Update] Allow web page to override a keyboard shortcut

  • 3 个回答
  • 0 人有此问题
  • 1 次查看
  • 最后回复者为 jonschz

more options

The excellent answer here no longer works in Firefox 117.0 on MacOS. Unfortunately, that post is archived, so I cannot post an updated solution there. I would greatly appreciate if a moderator could add this post in the linked article, or at least link from there over to here.

For Firefox 117, the code needs to be modified slightly (two lines at the top need to be removed): ```

  //
  function ConfigJS() { Services.obs.addObserver(this, 'chrome-document-global-created', false); }
  ConfigJS.prototype = {
   observe: function (aSubject) { aSubject.addEventListener('DOMContentLoaded', this, {once: true}); },
   handleEvent: function (aEvent) {
     let document = aEvent.originalTarget; let window = document.defaultView; let location = window.location;
     if (/^(chrome:(?!\/\/(global\/content\/commonDialog|browser\/content\/webext-panels)\.x?html)|about:(?!blank))/i.test(location.href)) {
       if (window._gBrowser) {
         let keys = ["key_find", "key_findAgain", "key_findPrevious", "key_gotoHistory", "addBookmarkAsKb", "bookmarkAllTabsKb", "showAllHistoryKb", "manBookmarkKb", "viewBookmarksToolbarKb", "key_savePage", "key_search", "key_search2", "focusURLBar", "focusURLBar2", "key_openDownloads", "openFileKb", "key_reload_skip_cache", "key_viewSource", "key_viewInfo", "key_privatebrowsing", "key_quitApplication", "context-bookmarklink"];
         for (var i=0; i < keys.length; i++) {
            let keyCommand = window.document.getElementById(keys[i]);
            if (keyCommand != undefined) { 
               keyCommand.removeAttribute("command"); 
               keyCommand.removeAttribute("key"); 
               keyCommand.removeAttribute("modifiers"); 
               keyCommand.removeAttribute("oncommand"); 
               keyCommand.removeAttribute("data-l10n-id"); 
            }
         }
       }
     }
   }
  };
  if (!Services.appinfo.inSafeMode) { new ConfigJS(); }

```

The excellent answer [[How to allow web page to override a keyboard shortcut|here]] no longer works in Firefox 117.0 on MacOS. Unfortunately, that post is archived, so I cannot post an updated solution there. I would greatly appreciate if a moderator could add this post in the linked article, or at least link from there over to here. For Firefox 117, the code needs to be modified slightly (two lines at the top need to be removed): ``` // function ConfigJS() { Services.obs.addObserver(this, 'chrome-document-global-created', false); } ConfigJS.prototype = { observe: function (aSubject) { aSubject.addEventListener('DOMContentLoaded', this, {once: true}); }, handleEvent: function (aEvent) { let document = aEvent.originalTarget; let window = document.defaultView; let location = window.location; if (/^(chrome:(?!\/\/(global\/content\/commonDialog|browser\/content\/webext-panels)\.x?html)|about:(?!blank))/i.test(location.href)) { if (window._gBrowser) { let keys = ["key_find", "key_findAgain", "key_findPrevious", "key_gotoHistory", "addBookmarkAsKb", "bookmarkAllTabsKb", "showAllHistoryKb", "manBookmarkKb", "viewBookmarksToolbarKb", "key_savePage", "key_search", "key_search2", "focusURLBar", "focusURLBar2", "key_openDownloads", "openFileKb", "key_reload_skip_cache", "key_viewSource", "key_viewInfo", "key_privatebrowsing", "key_quitApplication", "context-bookmarklink"]; for (var i=0; i < keys.length; i++) { let keyCommand = window.document.getElementById(keys[i]); if (keyCommand != undefined) { keyCommand.removeAttribute("command"); keyCommand.removeAttribute("key"); keyCommand.removeAttribute("modifiers"); keyCommand.removeAttribute("oncommand"); keyCommand.removeAttribute("data-l10n-id"); } } } } } }; if (!Services.appinfo.inSafeMode) { new ConfigJS(); } ```

被采纳的解决方案

That is this question:

You need to remove/replace this line as Services.jsm is no longer supported.

const {Services} = Components.utils.import('resource://gre/modules/Services.jsm');

Use this instead:

const Services = globalThis.Services || ChromeUtils.import("resource://gre/modules/Services.jsm").Services;

定位到答案原位置 👍 1

所有回复 (3)

more options

Hi

To help us understand this better, please can you share a link to the archived question that you had found.

more options

选择的解决方案

That is this question:

You need to remove/replace this line as Services.jsm is no longer supported.

const {Services} = Components.utils.import('resource://gre/modules/Services.jsm');

Use this instead:

const Services = globalThis.Services || ChromeUtils.import("resource://gre/modules/Services.jsm").Services;

more options

Thank you! I indeed forgot to link the question, my bad. In my case I did not have to add your corrected line, removing it entirely worked out. I suspect there are other cases where it is needed.