Ответ 1
Я предполагаю, что вы показываете обычную веб-страницу http://...
(или, возможно, https://...
или file://...
)) в своем киоске. Если вы действительно показываете приложение (т.е. chrome-extension://...
), эта стратегия не будет работать.
Расширение Chrome, которое вводит window.addEventListener("contextmenu", function(e) { e.preventDefault(); })
в каждый контекст просмотра, вероятно, сделает трюк для блокировки контекстных меню на iframes.
manifest.json:
{
"manifest_version": 2,
"name": "Context Menu Blocker",
"version": "1.0",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["contextblocker.js"],
"all_frames": true,
"match_about_blank": true
}
]
}
contextblocker.js:
window.addEventListener("contextmenu", function(e) { e.preventDefault(); })
Просто создайте папку и поместите два файла внутри. Затем перейдите к chrome://extensions/
, установите флажок Developer Mode
. Наконец, нажмите Load unpacked extension...
и выберите папку, которую вы только что создали.
Это должно помешать контекстному меню появляться в сценариях содержимого внутреннего контента, чтобы разрешить запуск, включить любую страницу, загруженную внутри iframe. Есть несколько заметных точек, где он не работает:
- Расширения не разрешены для запуска на страницах
chrome://
илиchrome-extension://
или в Google Web Store. Если ваш киоск отображает приложение, вся эта стратегия не будет работать, потому что это расширение не сможет получить доступ к iframes внутри другого приложения или расширения (даже если источник iframe является источником, который обычно имеет разрешение для доступа). - Если вы перейдете непосредственно к
about:blank
, содержимое script не будет запущено и появится контекстное меню. (Еслиabout:blank
загружается в iframe, однако, блок будет работать правильно.) - Если iframe имеет атрибут
sandbox
, который не включает разрешениеallow-scripts
, то расширение не может блокировать контекстные меню из этого iframe.
Пока ни одно из этих ограничений не применяется (и пока script на самой странице не очищает всех прослушивателей событий на window
), тогда он должен работать.
Я использовал приведенный выше код для создания простого расширения в Интернет-магазине Chrome. (Расширения для режима разработчика теперь вызывают предупреждение при запуске, в то время как расширения в веб-магазине - нет.)