JavaScript:跟踪Android上Firefox的选择变化
JavaScript: Tracking Selection Change on Firefox for Android
我正在寻找一种方法来跟踪网页上的文本选择。我需要一些代码在选择发生变化时执行。我在所有主流的桌面浏览器上都成功地做到了这一点,但在Android的Firefox上似乎行不通。
我尝试了三种方法(都没有成功!):
- 尝试捕捉
"mouseup"
事件并检查是否有非空文本选择。问题是"mouseup"
没有得到在鼠标上下移动期间进行选择时触发序列! - 尝试对
"touchend"
事件进行相同的操作-结果相同。 试图捕捉
"selectionchange"
事件。我发现它不是当选择更改时触发,因为它需要配置键"dom.select_events.enabled"
要设置。这是默认的false
,我显然不能要求我的访问者调整浏览器设置:-)而且,正如预期的那样,如果通过拖动选择开始/结束标记来扩展或缩小选择,则不会触发前两个事件。
我现在能想到的唯一解决方案是一个定期轮询器(使用setInterval),检查是否有一个文本选择。这绝对是不干净和反性能的。
任何替代方案和/或建议都会很有帮助。
1)本地文本选择事件
目前,轮询似乎是唯一的解决方法。然而,selectionchange
事件目前实验性地在Firefox for Android Nightly中实现。可以通过设置dom.select_events.enabled
标志为true
(默认为false
)来启用。
在夜间构建中,这个标志已经默认为true
,所以你有机会在几个月后正常使用它。
,
2)查找有效的事件
(未测试! !)
即使onselectstart
还不能有效地在Android的Firefox中使用,唯一可行的简单解决方案就是轮询。
为了提高性能和降低成本,可以在窗口blur
事件上启动轮询。因为无论何时用户进行选择,焦点都应该设置在(未经测试)。
window.addEventListener('blur', function(){
// start polling for text selections
});
当焦点返回时,轮询可以停止。
window.addEventListener('focus', function(){
// stop polling
});
要检查浏览器是否实际支持文本选择事件,您可以使用这个函数:
var browserSupportsTextSelectionEvents = function(){
return !!('onselectstart' in document.body);
}
,
<标题> 3)黑客h1> 三个想法是通过CSS (-moz-user-select: none
)禁用移动Firefox用户的文本选择,实现基于触摸开始和结束位置的自定义文本选择功能,并通过HTMLElement.setSelectionRange()
将本地选择范围推回浏览器。
标题>相关文章:
- 角度ng变化或ng点击选择can'不起作用
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- JavaScript:为什么不't将背景变化发送给用户's选择(简单)
- 如何选择多选的所有选项,顺序不应变化
- 更改选择框时计算价格变化
- 选择框选项不断变化
- 有没有办法防止选择菜单在值动态变化时关闭
- 如何检测从 ajax 加载的内容中选择的变化
- jQuery UI 滑块 - 根据选择而变化的自定义滑动按钮
- j查询多个和不断变化的 ID 选择器
- JavaScript:当用户用鼠标选择文本时,观察文本选择长度的变化
- 字体大小不随选择/下拉框而变化
- 如何在两个不断变化的字符串之间选择中间文本
- Angular:当列表发生变化时,如何重新绑定到之前选择的对象
- jQuery改变单选按钮上选择框的变化
- 检测UIWebView文本选择中的文本选择变化
- 四个选择选项框在每个选择框选项上动态变化
- 如何加载2个列表基于2个选择框在第一个框的变化
- 当选择的选项发生变化时,我应该动态地生成数据库查询吗?
- JavaScript:跟踪Android上Firefox的选择变化