文档.caretPositionFromPoint抓取过高
document.caretPositionFromPoint grabbing too high
我正在更新我的" jump-to-anchor ";add-on,这是一个Firefox插件,可以让你右键单击文档中的某个地方,(希望)得到最近的锚点在点击点上方。
提交插件后,我意识到我可以通过查找被单击的实际文本节点来改进算法,并从那里查找(而不是当前被单击元素的第一个子元素)。然而,在我的测试中(针对我碰巧正在阅读的页面https://www.rfc-editor.org/rfc/rfc5323#section-2.3.2),通过document.caretPositionFromPoint
抓取的文本节点比预期的要高。
var x = 0, y = 0;
window.addEventListener('click', function (e) {
if (e.button === 2) { // Avoid grabbing for the actual selection // Doesn't seem to execute on the final context menu click anyways
x = e.pageX;
y = e.pageY;
}
});
self.on('click', function () { // , data
// I added the next two lines just in case the user clicked off screen
x = x > window.mozInnerScreenX ? window.mozInnerScreenX : (x < 0 ? 0 : x);
y = y > window.mozInnerScreenY ? window.mozInnerScreenY : (y < 0 ? 0 : y);
var caretPosition = document.caretPositionFromPoint(x, y);
var node = caretPosition.offsetNode;
// Doesn't grab the right node.nodeValue here always--seems to grab too high up
// (Then search the node for an anchor, or recursively check the deepest child of the previous element sibling on up and keep looking for previous element siblings.)
});
听起来像个bug?
更新:
复制步骤:
- 从https://github.com/brettz9/jump-to-anchor/tree/document.caretPositionFromPoint安装XPI(或使用
cfx xpi
和SDK从源代码安装) - 进入https://www.rfc-editor.org/rfc/rfc5323#section-2.3.2
- 尝试在2.3.3节(注:2.3.3)中右键单击,可以看到它经常一直到"#page-10"锚代替"#section-2.3.3"锚。
(在Github的当前代码中,我有e.button === 2
检查注释出来,但结果是相同的。)
原来MDN上的文档是完全错误的。.caretPositionFromPoint
期望你传递相对于当前视口的坐标。
所以你必须使用e.clientX
/e.clientY
!
同样,.mozInnerScreenX
/Y
并没有做你可能期望它做的事情。使用window.innerWidth
/.innerHeight
,如果你想检查x
和y
是视图内的有效坐标。
所以这是我所尝试的,似乎是有效的(节选):
var x = 0, y = 0;
window.addEventListener('click', function (e) {
x = e.clientX;
y = e.clientY;
});
self.on('click', function () { // , data
x = Math.max(0, Math.min(innerWidth, x));
y = Math.max(0, Math.min(innerHeight, y));
var caretPosition = document.caretPositionFromPoint(x, y);
var node = caretPosition.offsetNode;
// ...
});
相关文章:
- 同源策略目的|用户数据与基本页面数据|客户端页面抓取
- VBA正在抓取不在HTML源文件中的生成内容
- 尝试使用Node.js动态路由从IMDB中抓取电影内容.但是在我的output.json文件中没有定义
- 如何从网站上抓取链接和图片
- 用jquery抓取图像SRC-attr
- Javascript Regex-从价格中抓取分隔符
- 使用网络服务器的IP地址而不是域名对其进行屏幕抓取
- Javascript:如何从URL中抓取片段并将其写入一些PHP
- 使用htmlunit抓取动态网页
- 如何抓取URL的一部分并将其粘贴到页面上的某个位置
- Html抓取网站加载错误的J汤Java
- 如何获取网站所有页面的链接以进行数据抓取
- 如何使用AJAX和JSON从一个页面抓取PHP变量到另一个页面
- 我可以使用RubyonRails抓取URL的源代码吗?还是应该使用PHP
- 我如何从一个无限滚动的网站抓取图像,其中api是隐藏的,我无法通过使用Inspect Element获得它->网络
- 淘汰从选项中抓取类
- 在Python中抓取javascript渲染的文本的最快解决方案
- 什么是处理JavaScript的最简单的网络抓取工具
- 使用 jQuery 从选择标签中抓取文本
- 无法在 IE 7/8 中使用 parentNode 抓取 DOM 节点