Как отключить правый клик на определенных сайтах

Я задаю этот вопрос не веб-разработчику, а конечному пользователю.

Я использую несколько веб-сайтов (Google Drive, Evernote и т. Д.), Которые имеют контекстное меню, которое активируется при щелчке правой кнопкой мыши. Однако в моем браузере (Firefox), если я щелкну правой кнопкой мыши, он откроет контекстное меню моего навигатора поверх контекстного меню, реализованного веб-разработчиком веб-сайта. Если щелкнуть правой кнопкой мыши второй раз, контекстное меню навигатора исчезнет, ​​оставив место для контекстного меню веб-приложения.

Как я, как конечный пользователь, могу отключить щелчок правой кнопкой мыши на определенных веб-сайтах? И если возможно, я бы хотел иметь такую ​​возможность "по требованию", то есть иметь возможность повторно активировать правые клики, когда захочу.

Есть ли для этого существующий аддон или трюки с JavaScript? И если нет, то в каком направлении я должен следовать, чтобы кодировать что-то вроде этого?

3 ответа

Решение

Я не знаю каких-либо расширений для достижения этой цели, но создать их не составит труда. Вы можете использовать Add-on SDK, который проще всего использовать через Add-on Builder, который является веб-приложением для создания расширений на основе SDK. Модули SDK высокого уровня не дают вам прямого доступа к окну браузера, однако вы должны использовать в основном недокументированные window-utils Модуль для этого. Следующий код в main.js работает:

var icons = {
  "enabled": "http://www.mozilla.org/favicon.ico",
  "disabled": "http://www.mozilla.org/media/img/favicon.ico"
};

function disableContextMenu(event)
{
  event.preventDefault();
}

require("widget").Widget({
  id: "disable-context-menu",
  label: "Disable Context Menu",
  contentURL: icons.enabled,
  onClick: function(view)
  {
    var window = require("window-utils").activeBrowserWindow;
    var menu = window.document.getElementById("contentAreaContextMenu");
    if (this.contentURL == icons.enabled)
    {
      menu.addEventListener("popupshowing", disableContextMenu, false);
      this.contentURL = icons.disabled;
    }
    else
    {
      menu.removeEventListener("popupshowing", disableContextMenu, false);
      this.contentURL = icons.enabled;
    }
  }
});

Это действительно так просто - добавление этого обработчика событий в контекстное меню отключает его, удаление этого обработчика событий включает его снова. Расширение также переключает значки, чтобы указать его состояние. Вот и все. Конечно, если вы хотите сохранить состояние для каждой вкладки, вам потребуется более сложная логика. Удачи!

Перейдите на вкладку "Содержимое" в разделе "Инструменты"> "Параметры". Нажмите кнопку " Дополнительно..." рядом с флажком " Включить JavaScript". Откроется диалоговое окно "Дополнительные параметры JavaScript". Установите флажок " Отключить или заменить контекстные меню в представленном списке".

К вашему сведению, для более новых версий FireFox (на случай, если кто-то пытается понять это, как я)

Пункт меню « Инструменты» > «Параметры» > «Содержимое» недоступен в новых версиях FireFox, таких как 78.9. Однако вы можете перейти к about:config и найти dom.event.contextmenu.enabled , установить для него значение True , и тогда веб-сайты смогут выборочно заменять контекстное меню, вызываемое правой кнопкой мыши.

Другие вопросы по тегам