在移动设备上选择文本时覆盖本机行为

Posted

技术标签:

【中文标题】在移动设备上选择文本时覆盖本机行为【英文标题】:Overrides the native behavior when selecting texts on mobile device 【发布时间】:2012-06-28 01:37:55 【问题描述】:

我想知道当您在移动浏览器上选择文本时是否有办法覆盖本机行为。我正在尝试通过提供自己的操作栏来支持 iPhone 和 android 设备。

有什么建议吗?

【问题讨论】:

【参考方案1】:

虽然您可以很简单地使用 selectionchange 事件来显示您的“操作栏”以及原生功能,但如果您想“替换”原生行为,您需要从头开始伪造整个选择或使用selectionchange 事件和第二次选择,例如,您使用彩色 span 元素包装所选文本并取消实际选择(同时显示您的操作栏),这种方法的问题在于 1)本机操作栏可能显示片刻和 2) 体验将不同于用户习惯的可能产生危险影响的体验。另一方面,如果您想从头开始进行选择,您应该使用user-select css 属性来禁用文本选择,然后根据 touchstart 和 thouchend 找出要“选择”的文本(带有彩色跨度)(实际上只有在极其受控的环境中才有可能(例如纯文本阅读器应用程序)。

请注意,这在 Firefox 和 Opera 中不起作用,因为在那里不会触发 selectionchange 事件,您需要在文档上使用 touchend 事件处理程序 + 停止所有其他 touchend 事件的冒泡以支持 Opera移动和火狐移动。 (归功于 select 不起作用而应该使用 selectionchange 的事实归功于 Tim Down)

【讨论】:

+1。但是,WebKit 不支持常规内容上的 select 事件(与表单输入相反)。您需要改用 selectionchange,它是几年前添加到 WebKit 的。 jsfiddle.net/EPbXQ 哦,我明白了,select 事件显然只针对输入元素触发。相应地更改了答案。 @DavidMulder,我以为你有解决方案。但是这些事件都没有在我运行 Android 4.1 的三星 Galaxy Nexus 上触发。但该事件是在我运行 Android 2.2 的 Samsung Fascinate 上触发的。关于 Galaxy Nexus,即使事件可能会触发。 getSelection() 始终为空。 您知道,我现在正在处理它。还有一件事,您可能不应该在 alpha 版本和自定义 rom 上进行开发,因为那从不具有代表性。 Android 4.0+ 浏览器严重混乱,如果我能鼓起动力,我会很快重试(对某些发现感到非常沮丧)。【参考方案2】:

参考:

jsFiddle Demo with Plugin

我制作的上述 jsFiddle Demo 使用了一个插件来让您防止在 Android 中选择任何文本块 >ios 设备(以及桌面浏览器)。

不会干扰您可能拥有的其他标记,例如 jsFiddle 中演示的 jQuery .click(); 事件侦听器。

它很容易使用,这是安装 jQuery 插件后的示例标记。

示例 HTML:

<p class="notSelectable">This text is not selectable</p>

<p> This text is selectable</p>

示例 jQuery:

$(document).ready(function()

   $('.notSelectable').disableSelection();

);

完整的 jQuery 插件:

$.fn.extend(
    disableSelection: function() 
        this.each(function() 
            this.onselectstart = function() 
                return false;
            ;
            this.unselectable = "on";
            $(this).css('-moz-user-select', 'none');
            $(this).css('-webkit-user-select', 'none');
        );
    
);

【讨论】:

另外,这个SO Answer 也可能有用。干杯!【参考方案3】:

如果您的目标是阻止选择,您可以使用一些 CSS,例如

body 
 
  -moz-user-select: none;
  -khtml-user-select: none;
  -webkit-user-select: none;
  user-select: none;

【讨论】:

以上是关于在移动设备上选择文本时覆盖本机行为的主要内容,如果未能解决你的问题,请参考以下文章

在具有多个摄像头的移动设备上选择默认的备用后置摄像头

输入类型=“日期”占位符 - 移动设备

在真实设备上选择 PDF 时 iOS 文档选择器崩溃

移动键盘上字母数字的html 5输入类型

媒体使用开发工具查询移动/桌面的不同可视化

在三星 Galaxy 设备上选择图像会旋转