Solución:
Supongo que estás mostrando una llanura http://...
(o posiblemente https://...
o file://...
) Página web en su quiosco. Si realmente muestra una aplicación (es decir, chrome-extension://...
), esta estrategia no funcionará.
Una extensión de Chrome que inyecta window.addEventListener("contextmenu", function(e) { e.preventDefault(); })
en cada contexto de navegación probablemente haría el truco para bloquear menús contextuales en 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(); })
Simplemente cree una carpeta y coloque los dos archivos dentro. Luego ve a chrome://extensions/
, comprobar el Developer Mode
caja. Finalmente, haga clic en Load unpacked extension...
y seleccione la carpeta que acaba de crear.
Esto debería evitar que el menú contextual aparezca en cualquier lugar donde se permita la ejecución de scripts de contenido de extensión, incluida cualquier página cargada dentro de un iframe. Hay algunos puntos notables en los que falla:
- No se permite que las extensiones se ejecuten en
chrome://
ochrome-extension://
páginas, o en la tienda web de Google. Si su kiosco muestra una aplicación, toda esta estrategia no funcionará, porque esta extensión no podrá acceder a los iframes dentro de otra aplicación o extensión (incluso si la fuente del iframe es un origen que normalmente tendría permiso acceder). - Si navega directamente a
about:blank
, la secuencia de comandos de contenido no se ejecutará y puede aparecer el menú contextual. (Siabout:blank
se carga en un iframe, sin embargo, el bloque funcionará correctamente). - Si un iframe tiene un
sandbox
atributo que no incluye elallow-scripts
permiso, entonces la extensión no puede bloquear los menús contextuales de ese iframe.
Siempre que no se aplique ninguna de esas restricciones (y siempre que un script en la página en sí no borre todos los detectores de eventos en window
), entonces debería funcionar.
He usado el código anterior para crear una extensión simple en Chrome Web Store. (Las extensiones del modo de desarrollador ahora producen una advertencia en el inicio, mientras que las extensiones de Web Store no lo hacen).
Si está utilizando jQuery, el siguiente código deshabilitará el menú contextual (también conocido como ‘clic derecho’).
$(document).on("contextmenu",function(){
return false;
});
});