【发布时间】:2017-12-27 22:25:00
【问题描述】:
我正在我网页的一个 div 中加载一个外部网页(即本示例中的 www.duckduckgo.com)。我想在 div 内部和外部获取鼠标 X 和 Y 位置,但是当我在 div 内部时,网页似乎阻止了 onmousemove 事件的触发。但是,onmouseover 事件在进入 div 时只触发一次。
这是说明我的问题的示例代码:
function mouseEvent(event) {
var x = event.clientX;
var y = event.clientY;
document.getElementById('label').innerHTML = 'X=' + x + ' Y=' + y;
}
html {
height: 100%;
width: 100%;
}
body {
height: 100%;
width: 100%;
overflow: hidden;
margin-left: 0px;
margin-top: 0px;
margin-bottom: 0px;
margin-right: 0px;
}
#form1 {
height: 100%;
width: 100%;
}
#pageDiv {
height: 100%;
width: 100%;
}
#page {
height: 100%;
width: 100%;
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div id="pageDiv">
<label id="label">hello</label>
<object id="page" type="text/html" data="https://duckduckgo.com/" onmousemove="mouseEvent(event)" onmouseover="mouseEvent(event)">
</object>
</div>
</form>
</body>
</html>
如何在此网页上的任何位置获取鼠标 X 和 Y 位置(即不仅仅是在包含外部源的 div 顶部)?我尝试将event.preventDefault(); 添加到 mouseEvent 函数的开头,但这在帮助领域没有任何作用。
我猜外部网页正在偷走我的焦点。是这样吗?无论如何我可以实现恒定的 X 和 Y 坐标更新吗?
【问题讨论】:
-
将事件附加到
window。可能是同源策略正在防止来自受污染对象的事件。 -
@adeneo 那行不通。我将以下代码
$(window).mousemove(mouseMove(event));添加到我的 html 文档的脚本部分。问题依然存在。 -
你可以看看this answer。据我了解,您可能处于“倒霉”的境地。
-
这是对类似问题的另一个答案:stackoverflow.com/a/2381484/1009922。
-
@ConnorsFan 是的,我开始意识到这是不可能的。我知道如果我使用 C++ 和/或任何非 Web 语言执行此操作,我可以完全按照我的意愿执行此操作,但我想您不能在浏览器中执行此操作。我想我可能会拦截鼠标事件并将它们中继到两个不同的 div,但那里的解决方案一直不起作用。我很可能会很快发布一个详细说明所有内容的答案,但与此同时,我会等着看是否有人有任何巧妙的裂缝
标签: javascript html asp.net mouseevent onmousemove