kor*_*sun 14 javascript iframe google-chrome kiosk-mode
我们正在为博物馆制作软件.Windows 8.1上有几个带触摸屏的交互式信息亭,它们连接到本地网络.没有键盘,没有鼠标.带有Apache的服务器包含几个本地网站.每个自助服务终端都以自助服务终端模式运行Google Chrome副本.因此,我们有一些本地Web应用程序,为博物馆访问者提供信息.
现在,问题.如果访问者在屏幕上长时间触摸,则其工作方式类似于右键单击.出现上下文菜单.我们根本不需要它.我已经将"oncontextmenu = return false"添加到body标签中并且它有所帮助.但.我们在iframe中运行了几个外部网站(博物馆与互联网连接).上下文菜单确实出现在iframe上.AFAIK,没有办法使用javascript禁用它.
我们的系统工程师获得了一个完全禁用Windows右键单击的软件.包括Chrome在内的任 但.它适用于鼠标.至于接触......好吧,除了 Chrome 之外,它还会禁用触摸事件.也许Chrome有自己的触摸事件处理程序,我不知道.
所以,毕竟.我们需要在Chrome的kiosk模式中右键单击/长按触摸iframe上的上下文菜单.请给我一些建议.
aps*_*ers 19
我假设您在自助服务终端上显示一个普通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
}
]
}
Run Code Online (Sandbox Code Playgroud)
contextblocker.js:
window.addEventListener("contextmenu", function(e) { e.preventDefault(); })
Run Code Online (Sandbox Code Playgroud)
只需创建一个文件夹并将两个文件放在里面.然后,转到chrome://extensions/,选中Developer Mode复选框.最后,单击Load unpacked extension...并选择刚刚创建的文件夹.
这应该可以防止上下文菜单出现在任何允许运行的扩展内容脚本中,包括在iframe中加载的任何页面.它失败的几点值得注意:
chrome://或chrome-extension://网页上运行扩展程序.如果您的自助服务终端正在显示应用,则此整个策略将无效,因为此扩展程序无法访问其他应用或扩展程序中的iframe(即使iframe的来源是通常拥有权限的来源访问).about:blank,则内容脚本将不会运行,并且可以显示上下文菜单.(about:blank但是,如果加载到iframe中,则块将正常工作.)sandbox不包含allow-scripts权限的属性,则扩展程序无法阻止该iframe中的上下文菜单.只要这些限制都不适用(并且只要页面上的脚本本身不清除所有事件侦听器window),那么它应该可以工作.
我使用上面的代码在Chrome网上应用店中创建了一个简单的扩展程序.(开发人员模式扩展现在会在启动时发出警告,而Web Store扩展则不会.)
| 归档时间: |
|
| 查看次数: |
20405 次 |
| 最近记录: |