【问题标题】:Disable callout (context menu) on mobile IE在移动 IE 上禁用标注(上下文菜单)
【发布时间】:2015-02-19 15:25:31
【问题描述】:

在网络应用程序中,我需要禁用移动浏览器在触摸并按住(“长按”)触摸目标(例如 <img> 或链接)时显示的默认标注。

我已经在 iPhone 和 iPad 上使用-webkit-touch-callout: none。我为 IE 尝试了 -ms-touch-action:nonetouch-action:none,但这似乎不起作用(在 IE11、Windows Phone 8 上测试)。

W3 邮件列表中的This post 建议在Javascript 中为“contextmenu”事件添加一个监听器并调用e.preventDefault()。这似乎也不起作用。

有什么建议吗?

【问题讨论】:

  • 也许也可以试试 MSHoldVisual、MSGesture (msdn.microsoft.com/en-us/library/ie/jj583807%28v=vs.85%29.aspx)?如果 preventDefault 在 img 上不起作用,我唯一要做的就是尝试在图像顶部放置一个 div 并防止点击/触摸它。但你可能已经知道了,那是脏代码,所以我不会真的建议它。

标签: javascript html css internet-explorer web-applications


【解决方案1】:

我做了很多研究,据我所知,这是您的两个选择:

  1. 使用透明的<div> 覆盖链接/图片
  2. 使用<div>style="background: url(yourimage.png)" 而不是<img src="yourimage.png">

核心问题是Windows Phone 上的移动IE 不能正确处理preventDefaultcontextmenu 事件。这是执行此操作的正确方法,它适用于所有其他浏览器。 contextmenu 事件在 WP IE 上被触发,但它实际上是在长按上下文菜单被解除时发生的。它甚至应该在显示菜单之前发生,以便您可以防止它。

以下是我尝试过的其他一些选项:

  1. 事件:我尝试注册每个事件并使用e.preventDefault()e.stopPropagation()return false 来阻止所有默认操作。 JSBin example.

  2. 使用element:beforeelement:after 将元素放置在链接或图像的顶部。我认为这可能能够自动完成透明<div> 所做的事情。不幸的是,:before:after 内容是<a> 的一部分,所以它也都是可点击的。此外,显然<img> 元素不支持:before:afterJSBin example.

  3. user-select: none

  4. -ms-touch-action
  5. -webkit-touch-callout: none
  6. 我什至 ping 过 IE 团队的某个人,但他不知道有什么办法。

【讨论】:

    【解决方案2】:

    我尝试了所有“正常”或“优雅”选项,但显然 IE11 移动版忽略了其中的每一个。

    唯一真正起作用的是旧的丑陋的 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;
    }
    

    【讨论】:

    • 显然没有优雅的答案,抱歉。我在 Browserstack 中测试了这些,并提供了我尝试过的链接。
    • 这个答案和pseudsavant 的答案都显示了一些很好的研究。我对两者都投了赞成票,但是我最终接受了伪学者的回答,因为它还解释了为什么在 contextmenu 事件中调用 preventDefault() 的“规范”方法不起作用。
    猜你喜欢
    • 2015-04-21
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多