如何在Chrome的自助服务终端模式下禁用右键单击/长按的上下文菜单
How to disable context menu on right click/long touch in a kiosk mode of Chrome?
我们正在为一家博物馆开发软件。在Windows 8.1上运行的几个带有触摸屏的交互式展台连接到本地网络。没有键盘,没有鼠标。带有Apache的服务器包含多个本地网站。每个自助服务终端都以自助服务终端模式运行一个 Google Chrome 副本。因此,我们有某种本地网络应用程序,可以为博物馆参观者提供信息。
现在,问题来了。如果访问者在屏幕上长时间触摸,它的工作方式类似于右键单击的类似物。此时将显示上下文菜单。我们根本不想要它。我在正文标签中添加了"oncontextmenu = return false",这很有帮助。但。我们有几个在iframe中运行的外部网站(博物馆与互联网相连)。上下文菜单确实出现在 iframe 上。AFAIK,没有办法使用 javascript 禁用它。
我们的系统工程师得到了一个完全禁用Windows右键单击的软件。任何地方,包括Chrome。但。它适用于鼠标。至于触摸...好吧,它可以禁用Chrome以外的任何地方的触摸事件。也许Chrome有自己的触摸事件处理程序,我不知道。
所以,毕竟。我们需要在Chrome的自助服务终端模式下右键单击/长按iframe上的上下文菜单。请给我一些建议。
我假设您在信息亭上显示一个普通的http://...
(或可能是https://...
或file://...
)网页。如果您实际显示的是应用程序(即chrome-extension://...
),则此策略将不起作用。
将window.addEventListener("contextmenu", function(e) { e.preventDefault(); })
注入每个浏览上下文的Chrome扩展程序可能会阻止iframe上的上下文菜单。
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
}
]
}
上下文阻止程序.js:
window.addEventListener("contextmenu", function(e) { e.preventDefault(); })
只需创建一个文件夹并将两个文件放在其中即可。然后,转到 chrome://extensions/
,选中Developer Mode
框。最后,单击Load unpacked extension...
并选择刚刚创建的文件夹。
这应该会阻止上下文菜单出现在允许运行扩展内容脚本的任何位置,包括 iframe 内加载的任何页面。它失败的几个值得注意的点:
- 扩展程序不得在
chrome://
或chrome-extension://
网页或 Google 网上应用店中运行。如果您的展台正在显示应用,则整个策略将不起作用,因为此扩展程序将无法访问其他应用或扩展程序内的 iframe(即使 iframe 的源是它通常有权访问的源)。 - 如果直接导航到
about:blank
,则内容脚本将不会运行,并且可能会出现上下文菜单。(但是,如果about:blank
加载到 iframe 中,则块将正常工作。 - 如果 iframe 具有不包含
allow-scripts
权限的sandbox
属性,则扩展无法阻止来自该 iframe 的上下文菜单。
只要这些限制都不适用(并且只要页面上的脚本本身不会清除window
上的所有事件侦听器),那么它应该可以工作。
我使用上面的代码在Chrome网上应用店中创建一个简单的扩展程序。(开发人员模式扩展现在会在启动时生成警告,而网上应用店扩展不会。
如果您使用的是jQuery,下面的代码将禁用上下文菜单(也称为"右键单击")。
$(document).on("contextmenu",function(){
return false;
});
});
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- 可以通过编程方式在javascript或jquery中单击箭头键
- 单击和键控操作可以完成一个功能
- 单击更改键,值对
- 如何检测右键单击+左键单击
- 检测右键单击+左键单击不起作用
- Javascript引导框,无法获得按钮单击ENTER键
- jQuery 选项卡悬停操作并单击 URL 键
- 绑定不同目标的单击和键控以执行相同的功能
- 灯箱触发事件以单击空格键或鼠标左键单击
- 全屏 API,无鼠标单击或键按下事件
- 单击空格键时,请勿向下滚动页面
- 用angularjs隐藏HTML部分,点击右键
- 浮动右点击右键和浮动左点击左键使用一个函数,只有javascript
- 如何在selenium中点击右键,不要使用javascript和fireevent
- 触发按钮,在文本框中单击Enter键会丢失其值
- 在信息框中单击右键不起作用
- 单击ESC键后执行
- 如何防止引导转盘在单击右/左控件后恢复幻灯片动画
- 更新表单验证右键剪切/粘贴