【问题标题】:How to prevent iOS Safari from making unwanted selections?如何防止 iOS Safari 做出不需要的选择?
【发布时间】:2021-11-09 11:35:34
【问题描述】:

当我在 iOS Safari 中长按我的 React 应用程序上的工具栏按钮时,它会选择图标。我用工具栏上的 CSS 禁用了它:

-webkit-touch-callout: none;
-webkit-user-select: none;
user-select: none;

但随后 Safari 继续选择它可以找到的下一个愚蠢的元素。

所以我最终将样式应用于我的应用程序的根目录,但现在用户当然不能选择段落等内容中的任何文本。

我真正想要的是一种设置屏障的方法,上面写着“Safari,你能不能停止尝试选择下一个你可能找到的东西?”

所以在我的工具栏组件上我这样做了,我验证它被调用了:

  onTouchStart={e => {
    e.stopPropagation();
    e.preventDefault();
    e.bubbles = false;
  }}

我也试过这个:

  onTouchStartCapture={e => {
    e.stopPropagation();
    e.preventDefault();
    e.bubbles = false;
  }}

onSelectonSelectCapture 也是如此。

然而 Safari 忽略了所有这些,并继续在层次结构中选择东西,一直到根 DIV,直到它发现一些无意义的选择。当我通过复制查看它选择的内容时,它只是一个空格。

我错过了什么?我真的必须将user-select: none; 应用于根,然后选择性地允许在有意义的地方进行选择,例如在包含文本的DIV 上?那么,长按工具栏时Safari怎么会找不到并选择呢?

【问题讨论】:

    标签: javascript reactjs dom mobile-safari react-dom


    【解决方案1】:

    您可以应用以下 css,因此您仍然可以选择 <p><h> 标签:

    p {
     -webkit-user-select: text !important;
     user-select: text !important;
    }
    h1 {
     -webkit-user-select: text !important;
     user-select: text !important;
    }
    h2 {
     -webkit-user-select: text !important;
     user-select: text !important;
    }
    h3 {
     -webkit-user-select: text !important;
     user-select: text !important;
    }
    h4 {
     -webkit-user-select: text !important;
     user-select: text !important;
    }
    h5 {
     -webkit-user-select: text !important;
     user-select: text !important;
    }
    h6 {
     -webkit-user-select: text !important;
     user-select: text !important;
    }
    

    【讨论】:

    • 当你这样做然后长按一个按钮时,iOS Safari 会冒泡选择,直到它找到启用选择的这些元素之一。有什么办法可以阻止它冒泡吗?
    • @codingChicken “冒泡”到底是什么意思?
    • 假设你有一个 div 有一个段落和另一个 div。另一个 div 有一个段落和一个工具栏 div。工具栏 div 有一个按钮。当您长按按钮时,Safari 会尝试变得聪明并开始搜索要选择的内容。 CSS 说它不能选择按钮,所以它查看兄弟。没有,所以它查看父级(工具栏),然后查看包含工具栏的 div。它在那里找到该段落,并选择该段落。选择事件正在冒泡。我正试图阻止这种情况发生。 CSS 无法阻止它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多