ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何在Chrome的自助服务终端模式中禁用右键/长按功能上下文菜单?

2019-10-05 20:37:40  阅读:192  来源: 互联网

标签:kiosk-mode javascript google-chrome iframe


我们正在为博物馆制作软件. Windows 8.1上有几个带触摸屏的交互式信息亭,它们连接到本地网络.没有键盘,没有鼠标.带有Apache的服务器包含几个本地网站.每个自助服务终端都以自助服务终端模式运行Google Chrome副本.因此,我们有一些本地Web应用程序,为博物馆访问者提供信息.

现在,问题.如果访问者在屏幕上长时间触摸,则其工作方式类似于右键单击.出现上下文菜单.我们根本不需要它.我已经将“oncontextmenu = return false”添加到body标签中并且它有所帮助.但.我们在iframe中运行了几个外部网站(博物馆与互联网连接).上下文菜单确实出现在iframe上. AFAIK,没有办法使用javascript禁用它.

我们的系统工程师获得了一个完全禁用Windows右键单击的软件.包括Chrome在内的任但.它适用于鼠标.至于接触……好吧,除了Chrome之外,它还会禁用触摸事件.也许Chrome有自己的触摸事件处理程序,我不知道.

所以,毕竟.我们需要在Chrome的kiosk模式中右键单击/长按触摸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
      }
    ]
}

contextblocker.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权限的沙箱属性,则扩展程序无法阻止该iframe中的上下文菜单.

只要这些限制都不适用(并且只要页面上的脚本本身不清除窗口上的所有事件侦听器),那么它应该可以工作.

我已经使用上面的代码创建了a simple extension in the Chrome Web Store.(开发人员模式扩展现在会在启动时产生警告,而Web Store扩展则不会.)

标签:kiosk-mode,javascript,google-chrome,iframe
来源: https://codeday.me/bug/20191005/1857510.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有