在移动IE上禁用标注(上下文菜单)

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

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

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

有什么建议么?


我做了大量的研究,据我所知这些是你的两个选择:

  • 使用透明的<div>来覆盖链接/图像
  • 使用带有style="background: url(yourimage.png)"<div>而不是<img src="yourimage.png">
  • 核心问题是Windows Phone上的移动IE无法正确处理带有contextmenu事件的preventDefault 。 这是做到这一点的正确方法,它适用于所有其他浏览器。 在WP IE上触发contextmenu事件,但实际上在长按上下文菜单被解除时发生。 在显示菜单之前应该会发生这种情况,以便您可以预防它。

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

  • 事件:我尝试注册每个事件并使用e.preventDefault()e.stopPropagation()return false以防止所有默认操作。 JSBin例子。

  • 使用element:beforeelement:after将元素放置在链接或图像的顶部。 我认为这可能会自动做透明的<div> 。 不幸的是:before:after内容是<a>一部分,所以它也是全部可点击的。 另外, <img>元素不支持:before:after 。 JSBin例子。

  • user-select: none

  • -ms-touch-action
  • -webkit-touch-callout: none
  • 我甚至在IE团队中打了一个人,他不知道有什么办法。

  • 我尝试了每个“正常”或“优雅”选项,但显然IE11手机忽略了其中的每一个。

  • CSS属性:-webkit-touch-callout等效于IE
  • Microsoft建议的preventDefault方法:https: preventDefault v= preventDefault
  • 捕捉所有触摸事件:在Android上长时间关闭上下文菜单
  • 一个homebrewn oncontextmenu回调与stopPropagationpreventDefault
  • 实际工作的唯一的东西是旧的丑陋的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;
    }
    
    链接地址: http://www.djcxy.com/p/83743.html

    上一篇: Disable callout (context menu) on mobile IE

    下一篇: Python: Getting a WindowsError instead of an IOError