离开 iframe 时鼠标悬停丢失:导致反向输入

Mouseup lost when leaving iframe: leads to reversed input

TL;DR 问题:

某些 javascript 如何告诉 window 鼠标按钮已被释放?由于跨域 iframe,mouseup 事件正在丢失。我可以检测到问题已经发生,但我不知道如何解决它。如果我可以强制鼠标指针定位,问题就会消失;但不允许 javascript 更改鼠标指针位置。如果我可以“启动 mouseup”,那么问题就会消失,因为它将替换丢失的 mouseup 事件;但是在新的 mouseup 事件上使用 dispatchEvent 什么都不做。

情况:

重要限制:

触发问题:

另一种反向插入文本的方法:

感知症状:

相关症状:

再次强调,只有CHROME有这种行为。在 Firefox、Edge 或 IE 中执行完全相同的操作,无论鼠标指针位于何处,都会立即检测到鼠标按钮释放。

尝试过的解决方法:

捕获丢失的 mouseup 事件:

通过将事件处理程序附加到外部文档中的 <body>,我可以捕获 mouseup。然后我可以使用标准 post 消息技术来告诉内部 iframe window 发生了鼠标弹起。内部 iframe 知道在拖动过程中哪个元素处于活动状态,所以这很好。但是,我在实际模拟 mouseup 事件时没有任何运气。我已经尝试了 triggerMouseEvent 技术 here。它运行没有错误,但它显然没有做任何事情。 此处的演示有上面的最小示例,加上在外部文档中捕获 mouseup 的管道,post 向内部文档发送消息,并调用 triggerMouseEventDemo2 LINK不再有效

另一种奇怪的可能性

在尝试创建最小示例时,我发现可能以某种方式涉及盒模型。 Demo1a LINK NO LONGER VALID 与上面的 demo1 相同,只是 iframe 元素的高度改为 710px 700 像素。 在我的测试机器上 这消除了错误。在同事的测试机上,bug依旧。

可能相关的已跟踪 Chromium 问题:

编辑 2018-09-25

我已经提交了Chromium issue #882491。目前还没有看到任何真正的activity.

编辑 2020-08-31

由于我离开了我工作的公司,演示链接不再有效。

此错误已在 Chrome 70 中修复,已宣布将于 2018 年 10 月 16 日发布。我已经在 Beta 频道中使用 Chrome 70 进行了测试,我确认它是确实修复了。