禁用移动IE上的callout(上下文菜单)
Disable callout (context menu) on mobile IE
在web应用程序中,我需要禁用移动浏览器在触摸并按住("长按")触摸目标(如<img>
或链接)时显示的默认标注。
我已经在iPhone和iPad上使用-webkit-touch-callout: none
了。我为IE尝试了-ms-touch-action:none
和touch-action:none
,但这似乎不起作用(在IE11、Windows Phone 8上测试)。
W3邮件列表中的这篇文章建议在Javascript中为"contextenu"事件添加一个监听器,并调用e.preventDefault()
。这似乎也不起作用。
有什么建议吗?
我做了一系列研究,据我所知,这是你的两个选择:
- 使用透明
<div>
覆盖链接/图像 - 使用
<div>
和style="background: url(yourimage.png)"
而不是<img src="yourimage.png">
核心问题是Windows Phone上的移动IE无法正确处理preventDefault
和contextmenu
事件。这是正确的方法,它适用于其他所有浏览器。contextmenu
事件是在WP IE上触发的,但它实际上是在长按上下文菜单被取消时发生的。它应该在显示菜单之前发生,这样你就可以防止它。
以下是我尝试过的其他一些选项:
-
事件:我尝试注册每个事件,并使用
e.preventDefault()
、e.stopPropagation()
和return false
来阻止所有默认操作。JSBin示例。 -
使用
element:before
或element:after
将元素放置在链接或图像的顶部。我认为这可能能够自动完成透明<div>
的功能。不幸的是,:before
或:after
内容是<a>
的一部分,因此它也都是可点击的。此外,<img>
元素显然不支持:before
或:after
。JSBin示例。 -
user-select: none
-ms-touch-action
-webkit-touch-callout: none
- 我甚至打电话给IE团队的某个人,他不知道该怎么办
我尝试了所有"普通"或"优雅"选项,但显然IE11 mobile忽略了其中的每一个。
- CSS属性:适用于IE的webkit touch callout等效项
- 微软建议的
preventDefault
方法:https://msdn.microsoft.com/en-US/en-en/library/jj583807(v=vs.85).aspx - 捕捉所有触摸事件:在Android上禁用长按时的上下文菜单
- 用
stopPropagation
和preventDefault
回拨家用oncontextmenu
唯一真正起作用的是旧的丑陋的div over image:
<div class="img-container">
<img src="path/to/image.jpeg" />
<div class="cover"></div>
</div>
CSS:
.img-container {
position: relative;
}
.cover {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
- 使用JQuery的动态上下文菜单
- JQuery在单击正文时隐藏上下文菜单
- JQuery上下文菜单显示/隐藏问题
- 防止在移动Safari(iPad/iPhone)中长按/长按默认上下文菜单
- d3防止在上下文菜单上触发mouseout
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- 使用JSTree上下文菜单捕获新创建的节点
- 在GXT中激活上下文菜单时,如何保持选中的文本高亮显示?(EXT GWT 2.x)
- HTML5上下文菜单-当菜单项被点击时,访问最初被点击的元素
- 可替代多级上下文菜单
- 如何在鼠标悬停时显示带有拉斐尔元素(圆、线)的上下文菜单
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 如何使用jstree删除上下文菜单中的编辑选项
- 如何使用Windows Phone在IE上禁用上下文菜单(保存和共享照片)
- TinyMCE 在上下文菜单中创建子菜单
- D3 上下文菜单,更改所选节点颜色
- 剑道上下文菜单 - 防止在鼠标按下时关闭
- 将上下文菜单附加到大量图形点
- API Google Maps Javascript在上下文菜单中调用事件侦听器
- 禁用特定元素的移动长按上下文菜单