在 Web 应用程序中,我需要禁用移动浏览器在触摸并按住(“长按”)触摸目标(例如 <img>
)时显示的默认标注。或链接。
我已经在使用 -webkit-touch-callout: none
适用于 iPhone 和 iPad。我试过 -ms-touch-action:none
和 touch-action:none
对于 IE,但这似乎不起作用(在 IE11、Windows Phone 8 上测试)。
This post来自 W3 邮件列表的建议在 Javascript 中为“contextmenu”事件添加一个监听器并调用 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 example .使用
element:before
或element:after
将元素放置在链接或图像的顶部。我想这也许可以自动做透明的事情<div>
做。不幸的是:before
或:after
内容是<a>
的一部分所以它也都是可点击的。另外,显然<img>
元素不支持:before
或:after
. JSBin example .user-select: none
-
-ms-touch-action
-
-webkit-touch-callout: none
- 我什至联系了 IE 团队的某个人,但他不知道有什么办法。
关于javascript - 在移动 IE 上禁用标注(上下文菜单),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28610143/